Ver código fonte

完成入库WMS逻辑

LD 6 anos atrás
pai
commit
a365497235

+ 29 - 22
app/Http/Controllers/RejectedBillItemController.php

@@ -151,12 +151,15 @@ class RejectedBillItemController extends Controller
         $item=$rejectedBillItems->first();
         $rejectedBill = RejectedBill::find($item['id_rejected_bill']);
         $downloadedSkus = WMSReflectReceive::downloadedSkus($rejectedBill['logistic_number_return']);
-        $isGotMoreThenDownloaded=WMSReflectReceiveSku::itemsOverDownloadedSkus($rejectedBillItems,$downloadedSkus);
+        $isGotMoreThenDownloaded=WMSReflectReceiveSku::isItemsOverDownloadedSkus($rejectedBillItems,$downloadedSkus);
         $isJianshang=(function($rejectedBill){
             $owner = Owner::find($rejectedBill['id_owner']);
             if(strstr($owner->name??'','笕尚')){
                 return true;
             }
+            if(strstr($owner->name??'','万龄')){
+                return true;
+            }
             return false;
         })($rejectedBill);
 
@@ -169,33 +172,37 @@ class RejectedBillItemController extends Controller
             return ['success'=>'true','bill_is_loaded'=>$isLoaded];
         }
 
+        if($isJianshang){
+            $sended=$this->sendRejectedToThirdPart($rejectedBillItems,$rejectedBill);
+            if(!$sended)return ['success'=>'false','fail_info'=>"有部分记录没有发送成功"];
+        }
 
-        //TODO: 发送给笕尚,应该单独抽出然后做出可配置流程
+        $this->log(__METHOD__,__FUNCTION__.'_'.$rejectedBill['id'],json_encode($request->toArray()),Auth::user()['id']);
+        return ['success'=>'true'];
+    }
+
+    public function sendRejectedToThirdPart(Collection $items,$rejectedBill):bool {
         $havingFail=0;
         if(!config('api.API_FAKING'))
-            $rejectedBillItems->each(function(RejectedBillItem $rejectedBillItem)use(&$havingFail,$rejectedBill,$isJianshang){
-//                $rejectedBill=RejectedBill::find($rejectedBillItem['id_rejected_bill']);
-//                if($rejectedBill['is_loaded']){
-//                    return false;
-//                }
-                if($isJianshang){
-                    $rejected=new Rejected();
-                    $rejected->fill($rejectedBill->toArray());
-                    $rejected->fill($rejectedBillItem->toArray());
-                    $rejectedJianshang=new api\thirdPart\jianshang\RejectedController();
-                    $sended=$rejectedJianshang->sendRejected($rejected);
-                    if(!$sended){
-                        echo '<h1>数据发送给笕尚失败,请通知IT相关负责人</h1>';
-                        $this->log(__METHOD__,'error_'.__FUNCTION__.'_'.$rejectedBillItem['id'],'数据发送给笕尚失败');
-                        $havingFail++;
-                        return false;
-                    }
+            $items->each(function(RejectedBillItem $rejectedBillItem)use(&$havingFail,$rejectedBill){
+                $rejected=new Rejected();
+                $rejected->fill($rejectedBill->toArray());
+                $rejected->fill($rejectedBillItem->toArray());
+                $rejectedJianshang=new api\thirdPart\jianshang\RejectedController();
+                $sended=$rejectedJianshang->sendRejected($rejected);
+                if(!$sended){
+                    echo '<h1>数据发送给笕尚失败,请通知IT相关负责人</h1>';
+                    $this->log(__METHOD__,'error_'.__FUNCTION__.'_'.$rejectedBillItem['id'],'数据发送给笕尚失败');
+                    $havingFail++;
+                    return false;
                 }
             });
 
-        if($havingFail>0)return ['success'=>'false','fail_info'=>"$havingFail/{$rejectedBillItems->count()} 条记录没有发送成功"];
-        $this->log(__METHOD__,__FUNCTION__.'_'.$rejectedBill['id'],json_encode($request->toArray()),Auth::user()['id']);
-        return ['success'=>'true'];
+        if($havingFail>0){
+            $this->log(__METHOD__,'error_'.__FUNCTION__.'_'.$rejectedBill['id'],"$havingFail/{$items->count()} 条记录没有发送成功",Auth::user()['id']);
+            return false;
+        }
+        return true;
     }
 
 

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

@@ -30,7 +30,8 @@ class TestController extends Controller
         return call_user_func([$this, $method],$request);
     }
     function t1(Request $request){ //x
-        ProcessReceiveCombined::dispatch('t1')->delay(now()->addSeconds(10));
+//        echo Carbon::createFromTimestampMs(1577700683000)->toString();
+        ProcessReceiveCombined::dispatch('ABC18abc')->delay(now()->addSeconds(30));
     }
     function tj(Request $request){
 

+ 8 - 8
app/Http/Controllers/api/thirdPart/flux/ReceiveController.php

@@ -115,7 +115,7 @@ class ReceiveController extends Controller
         $orderNumberCode=$wmsReceived['ASNREFERENCE1']??$rejectedBill['order_number'];
         $skuList=[];
         $rejectedBill->items()->each(function(RejectedBillItem $item)use($wmsReceived){
-            if($item['is_loaded']){return;}
+            if($item['is_loaded']=='已入库'){return;}
             $STATUS=$item['id_quality_label']==1?'ZP':'CC';
             $sku=$item->wmsReflectSku()->first();
             $sku="
@@ -165,19 +165,19 @@ class ReceiveController extends Controller
     ]
 }
         ";
-        $json = json_decode($json,true);
+        $sendingJson = json_decode($json,true);
         $url=url(config('api.receiveAccomplishToWMS_flux'));    //TODO: del this line
-        (new Controller())->log(__METHOD__,__FUNCTION__,json_encode($json));
-        $response = Zttp::post($url, $json);
+        $response = Zttp::post($url, $sendingJson);
         $noIssues=true;
-        $json = json_encode($response->body());
-        if(!$json||!isset($json['response'])||!$json['response']['return']['returnFlag']=='1'){
+        $json = $response->json();
+        (new Controller())->log(__METHOD__,__FUNCTION__,$response->body().'|'.json_encode($sendingJson));
+        if(!$json||!isset($json['Response'])||!$json['Response']['return']['returnFlag']=='1'){
             $noIssues=false;
         }
-        if($noIssues&&$json['response']['return']['returnFlag']=='1'){
+        if($noIssues&&$json['Response']['return']['returnFlag']=='1'){
             return true;
         }
-        (new Controller())->log(__METHOD__,'error_'.__FUNCTION__,$response->body());
+        (new Controller())->log(__METHOD__,'error_'.__FUNCTION__,$response->body().'|'.json_encode($sendingJson));
         return false;
     }
 }

+ 1 - 1
app/Listeners/InformWMSReceivedListener.php

@@ -37,7 +37,7 @@ class InformWMSReceivedListener
         }
         $rejectedBill['is_loaded']=true;
         $rejectedBill->items->each(function(RejectedBillItem $item){
-            $item['is_loaded']=true;
+            $item['is_loaded']='已入库';
             $item->save();
         });
         $rejectedBill->save();

+ 16 - 4
app/Listeners/WmsReceiveNewListener.php

@@ -5,12 +5,14 @@ namespace App\Listeners;
 use App\Events\InformWMSReceivedEvent;
 use App\Events\WmsReceiveNewEvent;
 use App\Http\Controllers\Controller;
+use App\Http\Controllers\RejectedBillItemController;
 use App\Jobs\ProcessReceiveCombined;
 use App\Owner;
 use App\RejectedBill;
 use App\RejectedBillItem;
 use App\WMSReflectReceive;
 use App\WMSReflectReceiveSku;
+use Carbon\Carbon;
 use Illuminate\Queue\InteractsWithQueue;
 use Illuminate\Contracts\Queue\ShouldQueue;
 use Illuminate\Support\Collection;
@@ -56,17 +58,27 @@ class WmsReceiveNewListener
             });
             return new Collection($items);
         })();
-        $itemsReceivedOverDownloaded=WMSReflectReceiveSku::itemsOverDownloadedSkus($actualGotItems,$downloadedSkuItems);
+        $isItemsReceivedOverDownloaded=WMSReflectReceiveSku::isItemsOverDownloadedSkus($actualGotItems,$downloadedSkuItems);
 
 
-        if(!$itemsReceivedOverDownloaded){//实收小于等于下发(下发大于等于实收),入库
+        if(!$isItemsReceivedOverDownloaded){//实收小于等于下发(下发大于等于实收),入库
             foreach ($bills as $bill){
-                if($bill['is_loaded']===false)
+                (new Controller())->log(__METHOD__,  '$bill', json_encode($bill));
+                if($bill['is_loaded']===0){
+                    (new Controller())->log(__METHOD__,  '$bill[\'is_loaded\']', json_encode($bill['is_loaded']));
                     event(new InformWMSReceivedEvent($bill));
+                }
             }
             return;
         }
-        //(下发小于实收),不入库,推入任务,13小时后重新执行本事件
+        //(下发小于实收)
+        //该单号在6小时前录入的,直接不入库,将实收推给客户(笕尚)
+        $lastReceive=WMSReflectReceive::where('ASNREFERENCE3',$logisticNumberReturn)->orderBy('id','desc')->first();
+        if(Carbon::make($lastReceive['created_at'])->addHours(6)->greaterThan(Carbon::now())){
+            (new RejectedBillItemController())->sendRejectedToThirdPart($actualGotItems,$bills->first());
+            return;
+        }
+        //不入库,推入任务,13小时后重新执行本事件
         ProcessReceiveCombined::dispatch($logisticNumberReturn)->delay(now()->addHours(13));
     }
 }

+ 1 - 1
app/WMSReflectReceive.php

@@ -21,7 +21,7 @@ class WMSReflectReceive extends Model
      * @return Collection
      */
     static function downloadedSkus($logisticNumberReturn){
-        $wmsReceives=WMSReflectReceive::with('skus.item')->where('ASNREFERENCE3',$logisticNumberReturn)->get();
+        $wmsReceives=WMSReflectReceive::with('skus')->where('ASNREFERENCE3',$logisticNumberReturn)->get();
         $downloadedItems=[];
         foreach ($wmsReceives as $wmsReceive){
             $wmsReceive->skus()->each(function (WMSReflectReceiveSku $sku)use(&$downloadedItems){

+ 6 - 3
app/WMSReflectReceiveSku.php

@@ -12,18 +12,21 @@ class WMSReflectReceiveSku extends Model
         return $this->belongsTo('App\WMSReflectReceive','wms_receive_id');
     }
 
-    static function itemsOverDownloadedSkus($actualGotItems, $downloadedItems){
+    static function isItemsOverDownloadedSkus($actualGotItems, $downloadedItems){
         foreach ($actualGotItems as $item){
             $isInDownloaded=false;
             foreach ($downloadedItems as $sku){
-                if($item&&$item['is_loaded'])continue;
+                if($item&&$item['is_loaded']=='已入库'){
+                    $isInDownloaded=true;
+                    break;
+                }
                 if($item['barcode_goods']==$sku['ALTERNATE_SKU1']){
+                    if($item['amount']<=$sku['EXPECTEDQTY_EACH'])
                     $isInDownloaded=true;
                     break;
                 }
             }
             if(!$isInDownloaded){
-                dd($item,$downloadedItems);
                 return true;
             }
         }