Browse Source

包裹跳过WMS接口的逻辑和BUG修复

LD 5 years ago
parent
commit
0cc2c26850

+ 2 - 2
app/Http/Controllers/LaborReportController.php

@@ -70,7 +70,7 @@ class LaborReportController extends Controller
         $permittingWorkgroups=UserWorkgroup::whereIn('id',$userWorkgroupIds)->get();
         if($permittingWorkgroups->isEmpty())$permittingWorkgroups="[]";
         $laravelEchoPrefix = config('database.redis.options.prefix');
-        if (!Gate::allows('人事管理-临时工报表')){return redirect(url('/')); }
+        if (!Gate::allows('人事管理-临时工报表-可见全部组')){return redirect(url('/')); }
         if ($request->input()){
             $laborReports=LaborReport::orderBy('id','DESC');
             $laborReports=$this->conditionQuery($request,$laborReports);
@@ -117,7 +117,7 @@ class LaborReportController extends Controller
         }
     }
     public function export($id,Request $request){
-        if (!Gate::allows('人事管理-临时工报表')){return redirect(url('/')); }
+        if (!Gate::allows('人事管理-临时工报表-可见全部组')){return redirect(url('/')); }
         ini_set('max_execution_time',3500);
         ini_set('memory_limit','3526M');
         if ($id==-1){

+ 8 - 5
app/Http/Controllers/PackageController.php

@@ -118,12 +118,15 @@ class PackageController extends Controller
         $isSamePackBatch=$request->input('is_same_pack_batch');
         if($logistic_number&&$batch_number)return redirect('package/create')->with('successError','录入失败!波次号和快递单号只能填一项!');
         $package=null;
-        if($batch_number){
-            $package=Package::where('batch_number',$batch_number)->first();
-        }elseif($logistic_number){
-            $package=Package::where('logistic_number',$logistic_number)->first();
+        if ($order_code){
+            $package=Package::where('order_code',$order_code)->first();
+        }else{
+            if($batch_number){
+                $package=Package::where('batch_number',$batch_number)->first();
+            }elseif($logistic_number){
+                $package=Package::where('logistic_number',$logistic_number)->first();
+            }
         }
-        if ($order_code)$package=Package::where('order_code',$order_code)->first();
 
         $accomplishToWMS=new Api\thirdPart\flux\PackageController();
         $result=$accomplishToWMS->markWMSOnBatch($batch_number,$weight);

+ 4 - 1
app/Http/Controllers/TestController.php

@@ -192,7 +192,10 @@ class TestController extends Controller
 
     public function delme()
     {
-        dd(DB::connection('oracle')->insert("insert into delme_log (id,name)values(?,?)",[32,'xx']));
+        $unpackedOrders = OracleDOCWaveDetails::select('doc_order_header.SOSTATUS')->where('doc_wave_details.waveno', 'W190630000042')->leftJoin('doc_order_header','doc_order_header.orderno','doc_wave_details.orderno')->where(function ($query){
+            $query->where('doc_order_header.SOSTATUS','<>','99')->where('doc_order_header.SOSTATUS','<>','63');
+        })->toSql();
+        dd($unpackedOrders);
     }
     public function excelIt()
     {

+ 5 - 53
app/Http/Controllers/api/thirdPart/flux/PackageController.php

@@ -3,7 +3,7 @@
 namespace App\Http\Controllers\Api\thirdPart\flux;
 
 use App\Http\Controllers\Controller;
-use App\Jobs\MarkPackageExcepted;
+use App\Jobs\FetchPackageFromOracle;
 use App\Logistic;
 use App\OracleDOCOrderDetail;
 use App\OracleDOCOrderHeader;
@@ -253,64 +253,16 @@ class PackageController extends Controller
     }
     public function markWMSOnBatch($batchNumber,$weight){
         $batchNumber = strtoupper($batchNumber);
-
-
         $docWaveHeader=OracleDOCWaveHeader::where('waveno',$batchNumber)->first();
         if(!$docWaveHeader){
             {return ['result'=>false,'message'=>'波次不存在'];}
         }
-        $unpackedOrders = OracleDOCOrderHeader::where('waveno', $batchNumber)->where(function ($query){
-            $query->where('SOSTATUS','<>','99')->where('SOSTATUS','<>','63');
-        })->get();
-        if($unpackedOrders->isNotEmpty()){return ['result'=>false,'message'=>'有未装箱或完成的订单在该波次,不能批量记录重量'];}
-
-
-
+        if(OracleDOCWaveDetails::unpackedOrders($batchNumber)->isNotEmpty())
+            {return ['result'=>false,'message'=>'有未装箱或完成的订单在该波次,不能批量记录重量'];}
 
         OracleDOCWaveHeader::where('waveno',$batchNumber)->update(['userdefine3'=>'Y']);
-
-        $numbersesOfBatch=OracleDOCWaveDetails::select('picktotraceid as logistic_number','act_allocation_details.orderno')->where('doc_wave_details.waveno','W190630000042')
-            ->leftJoin('act_allocation_details','doc_wave_details.orderno','act_allocation_details.orderno')->get();
-        $oneIdxAsrsReceive=OracleIdxAsrsReceive::where('userdefine1',$numbersesOfBatch[0]['logistic_number'])->first();
-        if(!$oneIdxAsrsReceive){
-            $inserts='';
-            $values=[];
-            foreach($numbersesOfBatch as $numbers){
-                $inserts .= " into idx_asrs_receive (grouptaskid,grouptasksequence,userdefine1,userdefine2,addwho,addtime)values(?,?,?,?,?,?) ";
-                $values[] = $numbers['logistic_number']??'';
-                $values[] = 1;
-                $values[] = $numbers['logistic_number']??'';
-                $values[] = $weight;
-                $values[] = 'WAS';
-                $values[] = Carbon::now();
-            }
-            DB::connection('oracle')->insert("insert all {$inserts} select * from dual",$values);
-        }else{
-            $logisticNumbers=$numbersesOfBatch->map(function($numbers){return $numbers['logistic_number'];});
-            OracleIdxAsrsReceive::whereIn('userdefine1',$logisticNumbers)->update(['userdefine2'=>$weight]);
-        }
-
-        $oneIdxAsrsReceive=OracleDocOrderPackingSummary::where('traceid',$numbersesOfBatch[0]['logistic_number'])->first();
-        if(!$oneIdxAsrsReceive){
-            $inserts='';
-            $values=[];
-            foreach($numbersesOfBatch as $numbers){
-                $inserts .= " into doc_order_packing_summary (traceid,orderno,grossweight,addwho,addtime,editwho,edittime)values(?,?,?,?,?,?,?) ";
-                $values[] = $numbers['logistic_number']??'';
-                $values[] = $numbers['orderno']??'';
-                $values[] = $weight;
-                $values[] = 'WAS';
-                $values[] = Carbon::now();
-                $values[] = 'WAS';
-                $values[] = Carbon::now();
-            }
-            DB::connection('oracle')->insert("insert all {$inserts} select * from dual",$values);
-        }else{
-            $logisticNumbers=$numbersesOfBatch->map(function($numbers){return $numbers['logistic_number'];});
-            OracleDocOrderPackingSummary::whereIn('traceid',$logisticNumbers)->update(['grossweight'=>$weight]);
-        }
-
-
+        OracleIdxAsrsReceive::saveOrUpdateWeightByBatch($batchNumber,$weight);
+        OracleDocOrderPackingSummary::saveOrUpdateWeightByBatch($batchNumber,$weight);
 
         //TODO
         Controller::logS(__METHOD__,'SUCCESS_'.__FUNCTION__,'标记WMS波次:'.$batchNumber.',userdefine3="Y"',auth()->user()['id']);

+ 47 - 69
app/Http/Controllers/api/thirdPart/weight/PackageController.php

@@ -6,7 +6,7 @@ use App\Events\WeighedEvent;
 use App\Http\Controllers\Controller;
 use App\Http\Controllers\LogisticNumberFeatureController;
 use App\Jobs\MeasuringMachineQueue;
-use App\Jobs\MarkPackageExcepted;
+use App\Jobs\FetchPackageFromOracle;
 use App\MeasuringMachine;
 use App\Package;
 use App\Waybill;
@@ -185,56 +185,35 @@ class PackageController extends Controller
         rsort($edges);
         $fluxController=new \App\Http\Controllers\Api\thirdPart\flux\PackageController();
         if ($package){
-            $packageController=new \App\Http\Controllers\PackageController();
             $package->fetchPaperBox($edges[0],$edges[1],$edges[2]);
             $package['bulk']=$edges[0]*$edges[1]*$edges[2];
-            //处理活动波次
-            if ($package->isActivityBatch()){
+            $package['measuring_machine_id']=$measuringMachine->id;
+            $package['weight']=$request['weight'];
+            $package['length']=$edges[0];
+            $package['width']=$edges[1];
+            $package['height']=$edges[2];
+            $package['weighed_at']=$reqDate;
+            if ($package->isActivityBatch()){//处理活动波次
+                $this->log(__METHOD__,__FUNCTION__,"依波次号同步所有包裹:".json_encode($package),null);
                 $package->unifyThisMeasureUnderBatch();
                 $result=$fluxController->markWMSOnBatch($package['batch_number'], $request['weight']);
-                $packageController->syncBatch($package->batch_number,$request['weight'],$max,$centre,$min,$reqDate,$package['paper_box_id']);
-            }else{
-                $package->measuring_machine_id=$measuringMachine->id;
-                $package->weight=$request['weight'];
-                $package->length=$max;
-                $package->width=$centre;
-                $package->height=$min;
-                $package->bulk=$max*$centre*$min;
-                $package->weighed_at=$reqDate;
-                $package->status="未上传";
-                $this->log(__METHOD__,'Batch_'.__FUNCTION__,json_encode($package),null);
-                $package->save();
-                $result=$fluxController->accomplishToWMS($package);
-                if ($result['result']){
-                    if ($package->status=="记录异常")$package->status="已上传异常";
-                    else $package->status="已上传";
-                }else{
+                if(!$result['result']){
                     $package->status="上传异常";
                 }
-                $package->save();
-            }
-            if ($package->order_code){
-                $waybill=Waybill::where('wms_bill_number',$package->order_code)->where('status','!=','已完结')
-                    ->where('status','!=','无模型')->first();
-                if ($waybill){
-                    $waybill->warehouse_weight_other=$package->weight;
-                    $waybill->warehouse_weight_unit_id_other=1;
-                    $waybill->update();
+            }else{
+                $this->log(__METHOD__,__FUNCTION__,"写入包裹至WMS:".json_encode($package),null);
+                try{
+                    $result=$fluxController->accomplishToWMS($package);
+                    if ($result['result']){
+                        $package->status="已上传";
+                    }else{
+                        $package->status="上传异常";
+                    }
+                }catch (\Exception $e){
+                    $package->status="未上传";
                 }
+                $package->save();
             }
-            event(new WeighedEvent($package));
-            $response=["msg"=>"保存成功",
-                "code"=>200,
-                "data"=>true,
-                "serverMsg"=>null,
-                "requestor"=>[
-                    "requestor"=>"1",
-                    "eventCode"=>"0",
-                    "reqDate"=>$reqDate,
-                    "resDate"=>Carbon::now()]
-            ];
-            $this->log(__METHOD__,'weightApi'.__FUNCTION__,json_encode($request).'|'.json_encode($response),null);
-            return json_encode($response,JSON_UNESCAPED_UNICODE);
         }
         if (!$package){
             $logisticNumber=$request['barcode'];
@@ -243,44 +222,43 @@ class PackageController extends Controller
                 'delivery_number'=>$logisticNumber,
                 'measuring_machine_id'=>$measuringMachine->id,
                 'weight'=>$request['weight'],
-                'length'=>$max,
-                'width'=>$centre,
-                'height'=>$min,
-                'bulk'=>$max*$centre*$min,
+                'length'=>$edges[0],
+                'width'=>$edges[1],
+                'height'=>$edges[2],
+                'bulk'=>$edges[0]*$edges[1]*$edges[2],
                 'weighed_at'=>$reqDate,
-                'status'=>"未下发",
+                'status'=>"",
             ]);
             $createPackage->fetchAllFromOracle();
-            $createPackage->fetchPaperBox($max, $centre, $min);
+            $createPackage->fetchPaperBox($edges[0], $edges[1], $edges[2]);
             $result=$fluxController->accomplishToWMS($createPackage);
+            if(!$createPackage['batch_number'])
+                FetchPackageFromOracle::dispatch($createPackage)->delay(Carbon::now()->addMinutes(1440));
             if(!$result['result']){
                 $this->log(__METHOD__,'weightApi'.__FUNCTION__,json_encode($request).'||'.json_encode($createPackage),null);
                 $response=["msg"=>"写入WMS失败!","code"=>500,"data"=>null];
                 return json_encode($response,JSON_UNESCAPED_UNICODE);
             }
-            if ($createPackage->save()){
-                $measuringMachine->touch();
-                MeasuringMachineQueue::dispatch($measuringMachine)->delay(Carbon::now()->addMinutes(30));
-                MarkPackageExcepted::dispatch($createPackage)->delay(Carbon::now()->addMinutes(1440));
-                event(new WeighedEvent($createPackage));
-                $response=["msg"=>"保存成功",
-                    "code"=>200,
-                    "data"=>true,
-                    "serverMsg"=>null,
-                    "requestor"=>[
-                        "requestor"=>"1",
-                        "eventCode"=>"0",
-                        "reqDate"=>$reqDate,
-                        "resDate"=>Carbon::now()]
-                ];
-                $this->log(__METHOD__,'weightApi'.__FUNCTION__,json_encode($request).'||'.json_encode($response),null);
+            if(!$createPackage->save()){
+                $response=["msg"=>"保存时发生错误(未下发)!","code"=>500,"data"=>null];
+                $this->log(__METHOD__,'weightApi(ERROR)'.__FUNCTION__,json_encode($request).'||'.json_encode($response),null);
                 return json_encode($response,JSON_UNESCAPED_UNICODE);
             }
-
-            $response=["msg"=>"保存时发生错误(未下发)!","code"=>500,"data"=>null];
-            $this->log(__METHOD__,'weightApi(ERROR)'.__FUNCTION__,json_encode($request).'||'.json_encode($response),null);
-            return json_encode($response,JSON_UNESCAPED_UNICODE);
         }
+        Waybill::setWeightByOrderCode($package->order_code,$package->weight);
+        event(new WeighedEvent($createPackage));
+        $response=["msg"=>"保存成功",
+            "code"=>200,
+            "data"=>true,
+            "serverMsg"=>null,
+            "requestor"=>[
+                "requestor"=>"1",
+                "eventCode"=>"0",
+                "reqDate"=>$reqDate,
+                "resDate"=>Carbon::now()]
+        ];
+        $this->log(__METHOD__,__FUNCTION__,"下发写入包裹成功:".json_encode($request).'|'.json_encode($response),null);
+        return json_encode($response,JSON_UNESCAPED_UNICODE);
     }
 
     public function validatorWeight(array $request){

+ 13 - 11
app/Jobs/MarkPackageExcepted.php → app/Jobs/FetchPackageFromOracle.php

@@ -10,7 +10,7 @@ use Illuminate\Queue\InteractsWithQueue;
 use Illuminate\Contracts\Queue\ShouldQueue;
 use Illuminate\Foundation\Bus\Dispatchable;
 
-class MarkPackageExcepted implements ShouldQueue
+class FetchPackageFromOracle implements ShouldQueue
 {
     use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
 
@@ -38,18 +38,20 @@ class MarkPackageExcepted implements ShouldQueue
             $controller->log(__METHOD__,'error_'.__FUNCTION__,"队列传递的package为空",null);
             return;
         }
-        $pickedPackage=Package::where('id',$this->package->id)->first();
-        if(!$pickedPackage){
+        $package=Package::find($this->package->id);
+        if(!$package){
             $controller->log(__METHOD__,'error_'.__FUNCTION__,"队列查询的package为空",null);
             return;
         }
-        if (!$pickedPackage->delivery_number){
-            $pickedPackage->status="下发异常";
-            $pickedPackage->save();
-        }
-        if (!$pickedPackage->weight){
-            $pickedPackage->status="测量异常";
-            $pickedPackage->save();
-        }
+        $package->fetchAllFromOracle();
+        $package->update();
+//        if (!$package->delivery_number){
+//            $package->status="下发异常";
+//            $package->save();
+//        }
+//        if (!$package->weight){
+//            $package->status="测量异常";
+//            $package->save();
+//        }
     }
 }

+ 3 - 0
app/OracleDOCOrderHeader.php

@@ -42,4 +42,7 @@ class OracleDOCOrderHeader extends Model
     public function getOracleBASCodeCodenameCAttribute(){
         return $this['oracleBASCode'] ? $this['oracleBASCode']['codename_c'] : null;
     }
+    public function hasUn(){
+        return $this->hasMany('App\OracleDOCOrderDetail','orderno','orderno');
+    }
 }

+ 7 - 0
app/OracleDOCWaveDetails.php

@@ -8,4 +8,11 @@ class OracleDOCWaveDetails extends Model
 {
     protected $connection='oracle';
     protected $table='DOC_WAVE_DETAILS';
+
+
+    static public function unpackedOrders($batchNumber){
+        return OracleDOCWaveDetails::where('doc_wave_details.waveno', $batchNumber)->leftJoin('doc_order_header','doc_order_header.orderno','doc_wave_details.orderno')->where(function ($query){
+            $query->where('doc_order_header.SOSTATUS','<>','99')->where('doc_order_header.SOSTATUS','<>','63');
+        })->get();
+    }
 }

+ 26 - 0
app/OracleDocOrderPackingSummary.php

@@ -2,7 +2,9 @@
 
 namespace App;
 
+use Carbon\Carbon;
 use Illuminate\Database\Eloquent\Model;
+use Illuminate\Support\Facades\DB;
 
 class OracleDocOrderPackingSummary extends Model
 {
@@ -12,4 +14,28 @@ class OracleDocOrderPackingSummary extends Model
     protected $fillable = ['traceid','orderno','grossweight','addwho','addtime','editwho','edittime'];
     public $timestamps=false;
     public function getIncrementing(){ return false;}
+
+    static public function saveOrUpdateWeightByBatch($batchNumber,$weight){
+        $numbersesOfBatch=OracleDOCWaveDetails::select('picktotraceid as logistic_number','act_allocation_details.orderno')->where('doc_wave_details.waveno',$batchNumber)
+            ->leftJoin('act_allocation_details','doc_wave_details.orderno','act_allocation_details.orderno')->get();
+        $oneIdxAsrsReceive=OracleDocOrderPackingSummary::where('traceid',$numbersesOfBatch[0]['logistic_number'])->first();
+        if(!$oneIdxAsrsReceive){
+            $inserts='';
+            $values=[];
+            foreach($numbersesOfBatch as $numbers){
+                $inserts .= " into doc_order_packing_summary (traceid,orderno,grossweight,addwho,addtime,editwho,edittime)values(?,?,?,?,?,?,?) ";
+                $values[] = $numbers['logistic_number']??'';
+                $values[] = $numbers['orderno']??'';
+                $values[] = $weight;
+                $values[] = 'WAS';
+                $values[] = Carbon::now();
+                $values[] = 'WAS';
+                $values[] = Carbon::now();
+            }
+            DB::connection('oracle')->insert("insert all {$inserts} select * from dual",$values);
+        }else{
+            $logisticNumbers=$numbersesOfBatch->map(function($numbers){return $numbers['logistic_number'];});
+            OracleDocOrderPackingSummary::whereIn('traceid',$logisticNumbers)->update(['grossweight'=>$weight]);
+        }
+    }
 }

+ 25 - 0
app/OracleIdxAsrsReceive.php

@@ -2,7 +2,9 @@
 
 namespace App;
 
+use Carbon\Carbon;
 use Illuminate\Database\Eloquent\Model;
+use Illuminate\Support\Facades\DB;
 
 class OracleIdxAsrsReceive extends Model
 {
@@ -12,4 +14,27 @@ class OracleIdxAsrsReceive extends Model
     protected $fillable = ['grouptaskid','grouptasksequence','userdefine1','userdefine2','addwho','addtime'];
     public $timestamps=false;
     public function getIncrementing(){ return false;}
+
+    static public function saveOrUpdateWeightByBatch($batchNumber,$weight){
+        $numbersesOfBatch=OracleDOCWaveDetails::select('picktotraceid as logistic_number','act_allocation_details.orderno')->where('doc_wave_details.waveno',$batchNumber)
+            ->leftJoin('act_allocation_details','doc_wave_details.orderno','act_allocation_details.orderno')->get();
+        $oneIdxAsrsReceive=OracleIdxAsrsReceive::where('userdefine1',$numbersesOfBatch[0]['logistic_number'])->first();
+        if(!$oneIdxAsrsReceive){
+            $inserts='';
+            $values=[];
+            foreach($numbersesOfBatch as $numbers){
+                $inserts .= " into idx_asrs_receive (grouptaskid,grouptasksequence,userdefine1,userdefine2,addwho,addtime)values(?,?,?,?,?,?) ";
+                $values[] = $numbers['logistic_number']??'';
+                $values[] = 1;
+                $values[] = $numbers['logistic_number']??'';
+                $values[] = $weight;
+                $values[] = 'WAS';
+                $values[] = Carbon::now();
+            }
+            DB::connection('oracle')->insert("insert all {$inserts} select * from dual",$values);
+        }else{
+            $logisticNumbers=$numbersesOfBatch->map(function($numbers){return $numbers['logistic_number'];});
+            OracleIdxAsrsReceive::whereIn('userdefine1',$logisticNumbers)->update(['userdefine2'=>$weight]);
+        }
+    }
 }

+ 14 - 6
app/Package.php

@@ -53,11 +53,17 @@ class Package extends Model
     }
     public function unifyThisMeasureUnderBatch(){
         $this->fetchPaperBox();
-        Package::where(['batch_number'=>$this['batch_number']])->update(['weight'=>$this['weight']??'',
-            'length'=>$this['length']??'',
-            'width'=>$this['width']??'',
-            'height'=>$this['height']??'',
-            'paper_box_id'=>$this['paper_box_id']??'']);
+        $params=[];
+        !empty($this['weight'])?$params['weight']= $this['weight']:null;
+        !empty($this['length'])?$params['length']= $this['length']:null;
+        !empty($this['width'])?$params['width']= $this['width']:null;
+        !empty($this['height'])?$params['height']= $this['height']:null;
+        !empty($this['bulk'])?$params['bulk']= $this['bulk']:null;
+        !empty($this['measuring_machine_id'])?$params['measuring_machine_id']= $this['measuring_machine_id']:null;
+        !empty($this['weighed_at'])?$params['weighed_at']= $this['weighed_at']:null;
+        !empty($this['paper_box_id'])?$params['paper_box_id']= $this['paper_box_id']:null;
+        if(empty($params)||empty($this['batch_number']))return;
+        Package::where(['batch_number'=>$this['batch_number']])->update([$params]);
     }
 
     public function fetchLogisticFromOracle(){
@@ -93,7 +99,8 @@ class Package extends Model
         $this['recipient'] = $this['oracleInfo']['Consigneename'];
         if($this['oracleInfo']['SOReference5'])
             $this['logistic_number'] = $this['oracleInfo']['SOReference5'];
-        $this['batch_rule'] = isset($this['oracleInfo']['userdefine2'])?$this['oracleInfo']['userdefine2']:'';
+        $this['batch_rule'] = $this['oracleInfo']['userdefine2']??null;
+        $this['batch_number'] = $this['oracleInfo']['waveno']??null;
     }
 
     public function getOracleInfoAttribute()
@@ -104,6 +111,7 @@ class Package extends Model
             'doc_order_header.userdefine1',
             'doc_order_header.userdefine2',
             'doc_order_header.SOReference5',
+            'doc_order_header.waveno',
             'doc_order_header.orderno',
             'doc_order_header.customerid',
             'doc_order_header.Consigneename'

+ 10 - 3
app/Waybill.php

@@ -84,9 +84,16 @@ class Waybill extends Model
         return $this->belongsTo('App\Unit','amount_unit_id','id');
     }
 
-//    public function getWaybillOnTopAttribute(){
-//        return $this->hasOne('App\WaybillOnTop','id','id');
-//    }
+    static public function setWeightByOrderCode($orderCode,$weight){
+        if(empty($orderCode))return;
+        $waybill=Waybill::where('wms_bill_number',$orderCode)->where('status','!=','已完结')
+            ->where('status','!=','无模型')->first();
+        if ($waybill){
+            $waybill->warehouse_weight_other=$weight;
+            $waybill->warehouse_weight_unit_id_other=1;
+            $waybill->update();
+        }
+    }
 
     public function getUploadFileUrlAttribute(){
         return $this['uploadFile']? asset('/storage'.$this['uploadFile']['url']):null;

+ 3 - 2
public/t.php

@@ -1,5 +1,6 @@
 <?php
 ;
-rsort($arr);
+$arr=[];
+$arr['a']=5;
 
-var_dump($arr);
+var_dump($arr['b']??3);