| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222 |
- <?php
- 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);
- }
- }
- }
|