|
|
@@ -1,13 +1,222 @@
|
|
|
-<?php
|
|
|
+<?php
|
|
|
|
|
|
-namespace App\Services;
|
|
|
+namespace App\Services;
|
|
|
|
|
|
+use App\Services\common\BatchUpdateService;
|
|
|
+use App\Services\common\DataHandlerService;
|
|
|
+use App\Store;
|
|
|
+use App\StoreItems;
|
|
|
+use Carbon\Carbon;
|
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
|
|
Class StoreItemService
|
|
|
-{
|
|
|
+{
|
|
|
public function insert(array $params){
|
|
|
return DB::table('store_items')->insert($params);
|
|
|
}
|
|
|
|
|
|
-}
|
|
|
+ public function storeItemCreateByWms($asnHerders)
|
|
|
+ {
|
|
|
+ if ($asnHerders->isEmpty())return null;
|
|
|
+ $asnDetails=collect();
|
|
|
+ $asnHerders->each(function ($asnHeader)use($asnDetails){
|
|
|
+ $asnHeader->asnDetails->each(function ($asnDetail)use($asnDetails){
|
|
|
+ $asnDetails->add($asnDetail);
|
|
|
+ });
|
|
|
+ });
|
|
|
+ $this->createStoreItem($asnDetails);
|
|
|
+ }
|
|
|
+
|
|
|
+ public function storeItemUpdateByWms($asnHerders)
|
|
|
+ {
|
|
|
+ if ($asnHerders->isEmpty())return null;
|
|
|
+ $asnDetails=collect();
|
|
|
+ $asnHerders->each(function ($asnHeader)use($asnDetails){
|
|
|
+ $asnHeader->asnDetails->each(function ($asnDetail)use($asnDetails){
|
|
|
+ $asnDetails->add($asnDetail);
|
|
|
+ });
|
|
|
+ });
|
|
|
+ $this->updateStoreItem($asnDetails);
|
|
|
+ }
|
|
|
+
|
|
|
+ public function createStoreItem($asnDetails)
|
|
|
+ {
|
|
|
+ if ($asnDetails->isEmpty())return null;
|
|
|
+ $stores = Store::query()->whereIn('asn_code',array_unique(data_get($asnDetails,'*.asnno')))->get();
|
|
|
+ $store_asn_code_map = [];
|
|
|
+ foreach ($stores as $store) {
|
|
|
+ $store_asn_code_map[$store->asn_code]= $store;
|
|
|
+ }
|
|
|
+ $params=$this->getParamsByAsnDetails($asnDetails,$store_asn_code_map);
|
|
|
+ if(count($params)> 0){
|
|
|
+ $this->insertStore($params);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ public function getParamsByAsnDetails($asnDetails,$store_asn_code_map)
|
|
|
+ {
|
|
|
+ /** @var DataHandlerService $dataHandlerService */
|
|
|
+ $dataHandlerService = app(DataHandlerService::class);
|
|
|
+ $storeItems=$this->getByWms($asnDetails);
|
|
|
+ $storeItem_map = $dataHandlerService->dataHeader(['store_asn_code','asn_line_code','sku'],$storeItems);
|
|
|
+ $params = [];
|
|
|
+ foreach ($asnDetails as $asnDetail) {
|
|
|
+ $storeItem =$dataHandlerService
|
|
|
+ ->getKeyValue(['store_asn_code'=>$asnDetail->asnno,'asn_line_code'=>$asnDetail->asnlineno,'sku'=>$asnDetail->sku],$storeItem_map);
|
|
|
+ if($storeItem ?? false)continue;
|
|
|
+ $params[] = [
|
|
|
+ 'store_id'=>$store_asn_code_map[$asnDetail->asnno]['id'],
|
|
|
+ 'asn_line_code' => $asnDetail->asnlineno,
|
|
|
+ 'name' =>$asnDetail->skudescrc,
|
|
|
+ 'sku' =>$asnDetail->sku,
|
|
|
+ 'barcode' =>$asnDetail->basSku?$asnDetail->basSku->alternate_sku1:'',
|
|
|
+ 'amount' =>$asnDetail->expectedqty??0,
|
|
|
+ 'quality' =>$asnDetail->qualityStatus?$asnDetail->qualityStatus->codename_c:'',
|
|
|
+ 'status' => $asnDetail->lineStatus?$asnDetail->lineStatus->codename_c:'',
|
|
|
+ 'created_at'=>$asnDetail->addtime??null,
|
|
|
+ 'updated_at'=>$asnDetail->edittime??null,
|
|
|
+ ];
|
|
|
+ }
|
|
|
+ return $params;
|
|
|
+ }
|
|
|
+ public function insertStore(array $params){
|
|
|
+ if(count($params) === 0) return [];
|
|
|
+ try {
|
|
|
+ $this->insert($params);
|
|
|
+ LogService::log(__METHOD__,__FUNCTION__,'批量创建 store_item success'.count($params).json_encode($params));
|
|
|
+ } catch (\Exception $e) {
|
|
|
+ LogService::log(__METHOD__,__FUNCTION__,'批量创建 store_item error'.json_encode($params).'||'.$e->getMessage().'||'.$e->getTraceAsString());
|
|
|
+ } finally{
|
|
|
+ return StoreItems::query()->whereIn('id',data_get($params,'*.id'))->get();
|
|
|
+ }
|
|
|
+ }
|
|
|
+// public function updateStoreItem($asnDetails)
|
|
|
+// {
|
|
|
+// if(!$asnDetails || $asnDetails->count() == 0){return null;}
|
|
|
+// /** @var DataHandlerService $dataHandlerService */
|
|
|
+// $dataHandlerService = app(DataHandlerService::class);
|
|
|
+// $storeItems=$this->getByWms($asnDetails);
|
|
|
+// $storeItems_map = $dataHandlerService->dataHeader(['store_asn_code','asn_line_code','sku'],$storeItems);
|
|
|
+// /** @var StoreService $storeService */
|
|
|
+// $storeService=app(StoreService::class);
|
|
|
+// $stores=$storeService->getByWms($asnDetails);
|
|
|
+// $stores_map = $dataHandlerService->dataHeader(['asn_code'],$stores);
|
|
|
+// $updateParams = [[
|
|
|
+// 'id','store_id','asn_line_code','name','sku','barcode','amount','quality','status','created_at','updated_at'
|
|
|
+// ]];
|
|
|
+// $updated_at=Carbon::now()->toDateTimeString();
|
|
|
+// $delete_storeItems=[];
|
|
|
+// foreach ($asnDetails as $asnDetail) {
|
|
|
+// $store =$dataHandlerService->getKeyValue(['asn_code'=>$asnDetail->asnno],$stores_map);
|
|
|
+// $storeItem =$dataHandlerService
|
|
|
+// ->getKeyValue(['store_asn_code'=>$asnDetail->asnno,'asn_line_code'=>$asnDetail->asnlineno,'sku'=>$asnDetail->sku],$storeItems_map);
|
|
|
+// if(!$storeItem){
|
|
|
+// array_push($delete_storeItems,$asnDetail);
|
|
|
+// continue;
|
|
|
+// }
|
|
|
+// if( $storeItem->store_id != $store->id ||
|
|
|
+// $storeItem->asn_line_code!=$asnDetail->asnlineno ||
|
|
|
+// $storeItem->name != $asnDetail->skudescrc ||
|
|
|
+// $storeItem->sku != $asnDetail->sku||
|
|
|
+// $storeItem->barcode !=$asnDetail->basSku->alternate_sku1||
|
|
|
+// $storeItem->amount !=$asnDetail->expectedqty||
|
|
|
+// $storeItem->quality !=$asnDetail->qualityStatus??$asnDetail->qualityStatus->codename_c||
|
|
|
+// $storeItem->status !=$asnDetail->lineStatus??$asnDetail->lineStatus->codename_c||
|
|
|
+// $storeItem->created_at !=$asnDetail->addtime||
|
|
|
+// $storeItem->updated_at != $asnDetail->edittime){
|
|
|
+// $updateParams[] = [
|
|
|
+// 'id'=>$storeItem->id,
|
|
|
+// 'store_id'=>$store->id,
|
|
|
+// 'asn_line_code' => $asnDetail->asnlineno,
|
|
|
+// 'name' =>$asnDetail->skudescrc,
|
|
|
+// 'sku' =>$asnDetail->sku,
|
|
|
+// 'barcode' =>$asnDetail->basSku?$asnDetail->basSku->alternate_sku1:'',
|
|
|
+// 'amount' =>$asnDetail->expectedqty??0,
|
|
|
+// 'quality' =>$asnDetail->qualityStatus?$asnDetail->qualityStatus->codename_c:'',
|
|
|
+// 'status' => $asnDetail->lineStatus?$asnDetail->lineStatus->codename_c:'',
|
|
|
+// 'created_at'=>$asnDetail->addtime??null,
|
|
|
+// 'updated_at'=>$updated_at,
|
|
|
+// ];
|
|
|
+// }
|
|
|
+// }
|
|
|
+// if(count($updateParams) > 1){
|
|
|
+// $this->batchUpdate($updateParams);
|
|
|
+// }
|
|
|
+//
|
|
|
+// if (count($asnDetails)<count($storeItems)){
|
|
|
+// dd($delete_storeItems);
|
|
|
+// }
|
|
|
+// unset($updateParams,$asnDetails);
|
|
|
+// }
|
|
|
+ public function updateStoreItem($asnDetails)
|
|
|
+ {
|
|
|
+ if(!$asnDetails || $asnDetails->count() == 0){return null;}
|
|
|
+ /** @var DataHandlerService $dataHandlerService */
|
|
|
+ $dataHandlerService = app(DataHandlerService::class);
|
|
|
+ $storeItems=$this->getByWms($asnDetails);
|
|
|
+ $asnDetails_map = $dataHandlerService->dataHeader(['asnno','asnlineno','sku'],$asnDetails);
|
|
|
+ $updateParams = [[
|
|
|
+ 'id','store_id','asn_line_code','name','sku','barcode','amount','quality','status','created_at','updated_at'
|
|
|
+ ]];
|
|
|
+ $updated_at=Carbon::now()->toDateTimeString();
|
|
|
+ $delete_storeItems=[];
|
|
|
+ foreach ($storeItems as $storeItem) {
|
|
|
+ $asnDetail =$dataHandlerService
|
|
|
+ ->getKeyValue(['asnno'=>$storeItem->store_asn_code,'asnlineno'=>$storeItem->asn_line_code,'sku'=>$storeItem->sku],$asnDetails_map);
|
|
|
+ if(!$asnDetail){
|
|
|
+ array_push($delete_storeItems,$storeItem);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ if($storeItem->asn_line_code!=$asnDetail['asnlineno'] ||
|
|
|
+ $storeItem->name != $asnDetail['skudescrc'] ||
|
|
|
+ $storeItem->sku != $asnDetail['sku']||
|
|
|
+ $storeItem->barcode !=$asnDetail['basSku']['alternate_sku1']||
|
|
|
+ $storeItem->amount !=$asnDetail['expectedqty']||
|
|
|
+ $storeItem->quality !=$asnDetail['qualityStatus']??$asnDetail['qualityStatus']['codename_c']||
|
|
|
+ $storeItem->status !=$asnDetail['lineStatus']??$asnDetail['lineStatus']['codename_c']||
|
|
|
+ $storeItem->created_at !=$asnDetail['addtime']||
|
|
|
+ $storeItem->updated_at != $asnDetail['edittime']){
|
|
|
+ $updateParams[] = [
|
|
|
+ 'id'=>$storeItem->id,
|
|
|
+ 'store_id'=>$storeItem->store->id,
|
|
|
+ 'asn_line_code' => $asnDetail['asnlineno'],
|
|
|
+ 'name' =>$asnDetail['skudescrc'],
|
|
|
+ 'sku' =>$asnDetail['sku'],
|
|
|
+ 'barcode' =>$asnDetail['basSku']?$asnDetail['basSku']['alternate_sku1']:'',
|
|
|
+ 'amount' =>$asnDetail['expectedqty']??0,
|
|
|
+ 'quality' =>$asnDetail['qualityStatus']?$asnDetail['qualityStatus']['codename_c']:'',
|
|
|
+ 'status' => $asnDetail['lineStatus']?$asnDetail['lineStatus']['codename_c']:'',
|
|
|
+ 'created_at'=>$asnDetail['addtime']??null,
|
|
|
+ 'updated_at'=>$updated_at,
|
|
|
+ ];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(count($updateParams) > 1){
|
|
|
+ $this->batchUpdate($updateParams);
|
|
|
+ }
|
|
|
+ if (count($delete_storeItems)>0) $this->deleteStoreItem($delete_storeItems);
|
|
|
+ unset($updateParams,$asnDetails,$delete_storeItems);
|
|
|
+ }
|
|
|
+ public function batchUpdate($params){
|
|
|
+ return app(BatchUpdateService::class)->batchUpdate('store_items',$params);
|
|
|
+ }
|
|
|
+
|
|
|
+ public function getByWms($asnDetails){
|
|
|
+ if(!$asnDetails){return null;}
|
|
|
+ return StoreItems::query()->whereHas('store',function($query)use($asnDetails){
|
|
|
+ $query->whereIn('asn_code',array_unique(data_get($asnDetails,'*.asnno')));
|
|
|
+ })->get();
|
|
|
+ }
|
|
|
+ public function deleteStoreItem(array $delete_storeItems){
|
|
|
+ $storeItemIds=[];
|
|
|
+ foreach ($delete_storeItems as $delete_storeItem){
|
|
|
+ array_push($storeItemIds,$delete_storeItem->id);
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ StoreItems::query()->whereIn('id', $storeItemIds)->delete();
|
|
|
+ LogService::log(__METHOD__,__FUNCTION__,'删除多余StoreItems '.count($delete_storeItems).json_encode($delete_storeItems),null);
|
|
|
+ } catch (\Exception $e) {
|
|
|
+ LogService::log(__METHOD__,__FUNCTION__,'删除多余StoreItems error'.count($delete_storeItems).json_encode($delete_storeItems).$e->getMessage().$e->getTraceAsString(),null);
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|