Просмотр исходного кода

正在连接FLUX的入库接口

LD 6 лет назад
Родитель
Сommit
48184bb247
26 измененных файлов с 952 добавлено и 32 удалено
  1. 23 0
      app/Events/InformWMSReceivedEvent.php
  2. 23 0
      app/Events/WmsReceiveNewEvent.php
  3. 39 12
      app/Http/Controllers/RejectedBillItemController.php
  4. 1 1
      app/Http/Controllers/RejectedBillItemController.php_updated
  5. 11 4
      app/Http/Controllers/RejectedController.php
  6. 2 0
      app/Http/Controllers/TestController.php
  7. 85 0
      app/Http/Controllers/WMSReflectReceiveController.php
  8. 85 0
      app/Http/Controllers/WMSReflectReceiveSkuController.php
  9. 90 0
      app/Http/Controllers/api/thirdPart/flux/PackageController.php
  10. 183 0
      app/Http/Controllers/api/thirdPart/flux/ReceiveController.php
  11. 13 3
      app/Http/Controllers/api/thirdPart/jianshang/RejectedController.php
  12. 42 0
      app/Jobs/ProcessReceiveCombined.php
  13. 45 0
      app/Listeners/InformWMSReceivedListener.php
  14. 72 0
      app/Listeners/WmsReceiveNewListener.php
  15. 6 6
      app/Providers/EventServiceProvider.php
  16. 5 0
      app/Providers/RouteServiceProvider.php
  17. 3 0
      app/RejectedBillItem.php
  18. 42 0
      app/WMSReflectReceive.php
  19. 32 0
      app/WMSReflectReceiveSku.php
  20. 5 0
      config/api.php
  21. 43 0
      database/migrations/2019_12_16_140649_create_w_m_s_reflect_receives_table.php
  22. 43 0
      database/migrations/2019_12_16_142443_create_w_m_s_reflect_receive_skus_table.php
  23. 36 0
      database/migrations/2019_12_29_172742_create_jobs_table.php
  24. 9 4
      resources/views/rejected/create.blade.php
  25. 2 2
      resources/views/rejected/edit.blade.php
  26. 12 0
      routes/api/thirdPart/flux.php

+ 23 - 0
app/Events/InformWMSReceivedEvent.php

@@ -0,0 +1,23 @@
+<?php
+
+namespace App\Events;
+
+use Illuminate\Broadcasting\Channel;
+use Illuminate\Queue\SerializesModels;
+use Illuminate\Broadcasting\PrivateChannel;
+use Illuminate\Broadcasting\PresenceChannel;
+use Illuminate\Foundation\Events\Dispatchable;
+use Illuminate\Broadcasting\InteractsWithSockets;
+use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
+
+class InformWMSReceivedEvent
+{
+    use Dispatchable, InteractsWithSockets, SerializesModels;
+
+    public $rejectedBill;
+    public function __construct($rejectedBill)
+    {
+        $this->rejectedBill=$rejectedBill;
+    }
+
+}

+ 23 - 0
app/Events/WmsReceiveNewEvent.php

@@ -0,0 +1,23 @@
+<?php
+
+namespace App\Events;
+
+use App\WMSReflectReceive;
+use Illuminate\Queue\SerializesModels;
+use Illuminate\Foundation\Events\Dispatchable;
+use Illuminate\Broadcasting\InteractsWithSockets;
+
+class WmsReceiveNewEvent
+{
+    use Dispatchable, InteractsWithSockets, SerializesModels;
+
+    public $logisticNumberReturn;
+    public $downloadedSkuItems;
+
+    public function __construct(string $logisticNumberReturn,array $downloadedSkuItems)
+    {
+        $this->logisticNumberReturn=$logisticNumberReturn;
+        $this->downloadedSkuItems=$downloadedSkuItems;
+    }
+
+}

+ 39 - 12
app/Http/Controllers/RejectedBillItemController.php

@@ -3,10 +3,13 @@
 namespace App\Http\Controllers;
 
 use App\Commodity;
+use App\Events\InformWMSReceivedEvent;
 use App\Owner;
 use App\Rejected;
 use App\RejectedBill;
 use App\RejectedBillItem;
+use App\WMSReflectReceive;
+use App\WMSReflectReceiveSku;
 use Illuminate\Http\Request;
 use Illuminate\Support\Collection;
 use Illuminate\Support\Facades\Auth;
@@ -117,7 +120,7 @@ class RejectedBillItemController extends Controller
                     $rejected=new Rejected();
                     $rejected->fill($rejectedBill->toArray());
                     $rejected->fill($rejectedBillItem->toArray());
-                    $rejectedJianshang=new api\jianshang\RejectedController();
+                    $rejectedJianshang=new api\thirdPart\jianshang\RejectedController();
                     $sended=$rejectedJianshang->sendRejected($rejected);
                     if(!$sended){
                         echo '<h1>数据发送给笕尚失败,请通知IT相关负责人</h1>';
@@ -141,27 +144,49 @@ class RejectedBillItemController extends Controller
         }
         $ids=$request->input('ids');
         if(!$ids)return ['success'=>'false','fail_info'=>'没有内容'];
-        $rejectedBillItems=RejectedBillItem::whereIn('id', $ids);
+        $rejectedBillItems=RejectedBillItem::whereIn('id', $ids)->get();
+        if($rejectedBillItems->count()==0){
+            return ['success'=>'false','fail_info'=>'没有匹配到相应内容'];
+        }
+        $item=$rejectedBillItems->first();
+        $rejectedBill = RejectedBill::find($item['id_rejected_bill']);
+        $downloadedSkus = WMSReflectReceive::downloadedSkus($rejectedBill['logistic_number_return']);
+        $isGotMoreThenDownloaded=WMSReflectReceiveSku::itemsOverDownloadedSkus($rejectedBillItems,$downloadedSkus);
+        $isJianshang=(function($rejectedBill){
+            $owner = Owner::find($rejectedBill['id_owner']);
+            if(strstr($owner->name??'','笕尚')){
+                return true;
+            }
+            return false;
+        })($rejectedBill);
+
+        if(!$isGotMoreThenDownloaded){
+            event(new InformWMSReceivedEvent($rejectedBill));
+            $isLoaded=false;
+            if($isJianshang){
+                $isLoaded=true;
+            }
+            return ['success'=>'true','bill_is_loaded'=>$isLoaded];
+        }
+
 
         //TODO: 发送给笕尚,应该单独抽出然后做出可配置流程
         $havingFail=0;
-        $rejectedBill=null;
         if(!config('api.API_FAKING'))
-            $rejectedBillItems->each(function(RejectedBillItem $rejectedBillItem)use(&$havingFail){
-                $rejectedBill=RejectedBill::find($rejectedBillItem['id_rejected_bill']);
-                if($rejectedBill['is_loaded']){
-                    return false;
-                }
-                $owner = Owner::find($rejectedBill['id_owner']);
-                if(strstr($owner->name??'','笕尚')){
+            $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\jianshang\RejectedController();
+                    $rejectedJianshang=new api\thirdPart\jianshang\RejectedController();
                     $sended=$rejectedJianshang->sendRejected($rejected);
                     if(!$sended){
                         echo '<h1>数据发送给笕尚失败,请通知IT相关负责人</h1>';
-                        $this->log(__METHOD__,'error'.__FUNCTION__.'_'.$rejectedBillItem['id'],'数据发送给笕尚失败');
+                        $this->log(__METHOD__,'error_'.__FUNCTION__.'_'.$rejectedBillItem['id'],'数据发送给笕尚失败');
                         $havingFail++;
                         return false;
                     }
@@ -172,6 +197,8 @@ class RejectedBillItemController extends Controller
         $this->log(__METHOD__,__FUNCTION__.'_'.$rejectedBill['id'],json_encode($request->toArray()),Auth::user()['id']);
         return ['success'=>'true'];
     }
+
+
     public function apiPackDestroy(Request $request)
     {
         if(!(Gate::allows('退货管理-录入')||Gate::allows('退货管理-编辑'))){

+ 1 - 1
app/Http/Controllers/RejectedBillItemController.php_updated

@@ -121,7 +121,7 @@ class RejectedBillItemController extends Controller
         if($noNeedSend){
             return ['success'=>'true'];
         }
-        $rejectedJianshang=new api\jianshang\RejectedController();
+        $rejectedJianshang=new api\thirdPart\jianshang\RejectedController();
         $rejected['goodses']=$goodses;
         $sendResult=$rejectedJianshang->sendRejected($rejected);
         if(!$sendResult['success']){

+ 11 - 4
app/Http/Controllers/RejectedController.php

@@ -137,11 +137,18 @@ class RejectedController extends Controller
             }
         }
         if($is_checked!=''){
-            $orderSign = false;
-            if($is_checked){
-                $orderSign = true;
+//            $orderSign = false;
+//            if($is_checked){
+//                $orderSign = true;
+//            }
+            if(!$is_checked)
+                $rejectedBillsQuery=$rejectedBillsQuery->where(function ($query) {
+                    $query->where('is_checked', false)
+                        ->orWhere('is_checked', null);
+                });
+            else{
+                $rejectedBillsQuery=$rejectedBillsQuery->where('is_checked', true);
             }
-            $rejectedBillsQuery=$rejectedBillsQuery->where('is_checked', $orderSign);
         }
         if($is_loaded!=''){
             if($is_loaded=='null')$is_loaded=null;

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

@@ -5,6 +5,7 @@ namespace App\Http\Controllers;
 
 use App\Batch;
 use App\Events\CancelOrder;
+use App\Jobs\ProcessReceiveCombined;
 use App\Order;
 use App\Rejected;
 use App\RejectedBill;
@@ -29,6 +30,7 @@ class TestController extends Controller
         return call_user_func([$this, $method],$request);
     }
     function t1(Request $request){ //x
+        ProcessReceiveCombined::dispatch('t1')->delay(now()->addSeconds(10));
     }
     function tj(Request $request){
 

+ 85 - 0
app/Http/Controllers/WMSReflectReceiveController.php

@@ -0,0 +1,85 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use App\WMSReflectReceive;
+use Illuminate\Http\Request;
+
+class WMSReflectReceiveController extends Controller
+{
+    /**
+     * Display a listing of the resource.
+     *
+     * @return \Illuminate\Http\Response
+     */
+    public function index()
+    {
+        //
+    }
+
+    /**
+     * Show the form for creating a new resource.
+     *
+     * @return \Illuminate\Http\Response
+     */
+    public function create()
+    {
+        //
+    }
+
+    /**
+     * Store a newly created resource in storage.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @return \Illuminate\Http\Response
+     */
+    public function store(Request $request)
+    {
+        //
+    }
+
+    /**
+     * Display the specified resource.
+     *
+     * @param  \App\WMSReflectReceive  $wMSReflectReceive
+     * @return \Illuminate\Http\Response
+     */
+    public function show(WMSReflectReceive $wMSReflectReceive)
+    {
+        //
+    }
+
+    /**
+     * Show the form for editing the specified resource.
+     *
+     * @param  \App\WMSReflectReceive  $wMSReflectReceive
+     * @return \Illuminate\Http\Response
+     */
+    public function edit(WMSReflectReceive $wMSReflectReceive)
+    {
+        //
+    }
+
+    /**
+     * Update the specified resource in storage.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @param  \App\WMSReflectReceive  $wMSReflectReceive
+     * @return \Illuminate\Http\Response
+     */
+    public function update(Request $request, WMSReflectReceive $wMSReflectReceive)
+    {
+        //
+    }
+
+    /**
+     * Remove the specified resource from storage.
+     *
+     * @param  \App\WMSReflectReceive  $wMSReflectReceive
+     * @return \Illuminate\Http\Response
+     */
+    public function destroy(WMSReflectReceive $wMSReflectReceive)
+    {
+        //
+    }
+}

+ 85 - 0
app/Http/Controllers/WMSReflectReceiveSkuController.php

@@ -0,0 +1,85 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use App\WMSReflectReceiveSku;
+use Illuminate\Http\Request;
+
+class WMSReflectReceiveSkuController extends Controller
+{
+    /**
+     * Display a listing of the resource.
+     *
+     * @return \Illuminate\Http\Response
+     */
+    public function index()
+    {
+        //
+    }
+
+    /**
+     * Show the form for creating a new resource.
+     *
+     * @return \Illuminate\Http\Response
+     */
+    public function create()
+    {
+        //
+    }
+
+    /**
+     * Store a newly created resource in storage.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @return \Illuminate\Http\Response
+     */
+    public function store(Request $request)
+    {
+        //
+    }
+
+    /**
+     * Display the specified resource.
+     *
+     * @param  \App\WMSReflectReceiveSku  $wMSReflectReceiveSku
+     * @return \Illuminate\Http\Response
+     */
+    public function show(WMSReflectReceiveSku $wMSReflectReceiveSku)
+    {
+        //
+    }
+
+    /**
+     * Show the form for editing the specified resource.
+     *
+     * @param  \App\WMSReflectReceiveSku  $wMSReflectReceiveSku
+     * @return \Illuminate\Http\Response
+     */
+    public function edit(WMSReflectReceiveSku $wMSReflectReceiveSku)
+    {
+        //
+    }
+
+    /**
+     * Update the specified resource in storage.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @param  \App\WMSReflectReceiveSku  $wMSReflectReceiveSku
+     * @return \Illuminate\Http\Response
+     */
+    public function update(Request $request, WMSReflectReceiveSku $wMSReflectReceiveSku)
+    {
+        //
+    }
+
+    /**
+     * Remove the specified resource from storage.
+     *
+     * @param  \App\WMSReflectReceiveSku  $wMSReflectReceiveSku
+     * @return \Illuminate\Http\Response
+     */
+    public function destroy(WMSReflectReceiveSku $wMSReflectReceiveSku)
+    {
+        //
+    }
+}

+ 90 - 0
app/Http/Controllers/api/thirdPart/flux/PackageController.php

@@ -0,0 +1,90 @@
+<?php
+
+namespace App\Http\Controllers\Api\thirdPart\flux;
+
+use App\Batch;
+use App\Http\Controllers\Controller;
+use App\Order;
+use App\OrderBarcode;
+use App\SkuNew;
+use App\WMSReflectPackage;
+use App\WMSReflectReceive;
+use App\WMSReflectReceiveSku;
+use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Auth;
+use Illuminate\Support\Facades\Validator;
+use Zttp\Zttp;
+
+class PackageController extends Controller
+{
+
+    public function new_(Request $request)
+    {
+        $errors=$this->validatorForNew($request->all())->errors();
+        if(count($errors)>0){
+            return ['response'=>['flag'=>'W','message'=>'fields wrong, see Errors report please.',
+                'errors'=>$errors]];
+        }
+        $receiveInputs=$request->input('request');
+        $receive = new WMSReflectPackage($receiveInputs);
+        $receive->save();
+        return response()->json(['response'=>['flag'=>'Y','code'=>'0000','message'=>'正确接收']])
+            ->setEncodingOptions(JSON_UNESCAPED_UNICODE);
+    }
+
+    protected function validatorForNew(array $data)
+    {
+        return Validator::make($data, [
+            'request' => ['required', 'array', 'min:1'],
+            'request.TASKID' => ['required', 'string', 'max:191'],
+            'request.Orderno' => ['required', 'string', 'max:191'],
+            'request.palletid' => ['required', 'string', 'max:191'],
+            'request.SOReference5' => ['required', 'string', 'max:191'],
+            'request.Customer' => ['nullable', 'string', 'max:191'],
+            'request.Consigneename' => ['nullable', 'string', 'max:191'],
+            'request.CarrierID' => ['nullable', 'string', 'max:191'],
+            'request.USERDEFINE1' => ['nullable', 'string', 'max:191'],
+            'request.USERDEFINE2' => ['nullable', 'string', 'max:191'],
+            'request.USERDEFINE3' => ['nullable', 'string', 'max:191'],
+        ],[],[
+            'request.TASKID' => 'TASKID',
+            'request.USERDEFINE1' => 'USERDEFINE1',
+            'request.USERDEFINE2' => 'USERDEFINE2',
+            'request.USERDEFINE3' => 'USERDEFINE3',
+        ]);
+    }
+    /**
+     * 完成的包裹称量发送给WMS
+     */
+    public function accomplishToWMS()
+    {
+        $json='
+{
+    "request":
+        {
+            "TASKID": "TS000001",
+            "SOReference5": "806086633425772945",
+            "Weigh": "50",
+            "Package": "bz0987651234",
+            "USERDEFINE1": "",
+            "USERDEFINE2": "",
+            "USERDEFINE3": "",
+        }
+}
+        ';
+        $json = json_decode($json,true);
+        $url=url(config('api.accomplishToWMS_flux'));
+        $response = Zttp::post($url, $json);
+        $noIssues=true;
+        $json = json_encode($response->body());
+        if(!$json||!isset($json['response'])||!$json['response']['flag']=='Y'){
+            $noIssues=false;
+        }
+        if($noIssues&&$json['response']['flag']=='Y'){
+            return ['result'=>'success'];
+        }
+        return $this->apiError(__METHOD__,$response->body());
+    }
+
+
+}

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

@@ -0,0 +1,183 @@
+<?php
+
+namespace App\Http\Controllers\Api\thirdPart\flux;
+
+use App\Batch;
+use App\Events\WmsReceiveNewEvent;
+use App\Http\Controllers\Controller;
+use App\Order;
+use App\OrderBarcode;
+use App\RejectedBill;
+use App\RejectedBillItem;
+use App\SkuNew;
+use App\WMSReflectReceive;
+use App\WMSReflectReceiveSku;
+use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Auth;
+use Illuminate\Support\Facades\Validator;
+use Zttp\Zttp;
+
+class ReceiveController extends Controller
+{
+
+    /**
+     * 收货任务下发
+     */
+    public function new_(Request $request)
+    {
+        $errors=$this->validatorForNew($request->all())->errors();
+        if(count($errors)>0){
+            $this->log(__METHOD__, 'error' . __FUNCTION__, json_encode($request->all()));
+            return ['response'=>['flag'=>'W','message'=>'fields wrong, see Errors report please.',
+                'errors'=>$errors]];
+        }
+        $receiveInputs=$request->input('request');
+        foreach ($receiveInputs as $receiveInput){
+            $receive=new WMSReflectReceive($receiveInput);
+            $receive->save();
+            $skus=[];
+            foreach ($receiveInput['SKU_LIST'] as $skuInput){
+                $sku=new WMSReflectReceiveSku($skuInput);
+                $receive->skus()->save($sku);
+                $skus[]=$sku;
+            }
+            event(new WmsReceiveNewEvent($receive['ASNREFERENCE3'],$skus));
+        }
+        return response()->json(['response'=>['flag'=>'Y','code'=>'0000','message'=>'正确接收']])
+            ->setEncodingOptions(JSON_UNESCAPED_UNICODE);
+    }
+    protected function validatorForNew(array $data)
+    {
+        return Validator::make($data, [
+            'request' => ['required', 'array', 'min:1'],
+            'request.*.ASNNO' => ['required', 'string', 'max:191'],
+            'request.*.WAREHOUSEID' => ['required', 'string', 'max:191'],
+            'request.*.CUSTOMERID' => ['required', 'string', 'max:191'],
+            'request.*.ASNTYPE' => ['nullable', 'string', 'max:191'],
+            'request.*.ASNREFERENCE1' => ['required', 'string', 'max:191'],
+            'request.*.ASNREFERENCE2' => ['nullable', 'string', 'max:191'],
+            'request.*.ASNREFERENCE3' => ['required', 'string', 'max:191'],
+            'request.*.ASNSTATUS' => ['nullable', 'string', 'max:191'],
+            'request.*.NOTES' => ['nullable', 'string', 'max:191'],
+            'request.*.USERDEFINE1' => ['nullable', 'string', 'max:191'],
+            'request.*.USERDEFINE2' => ['nullable', 'string', 'max:191'],
+            'request.*.USERDEFINE3' => ['nullable', 'string', 'max:191'],
+            'request.*.SKU_LIST' => ['required', 'array', 'min:1'],
+            'request.*.SKU_LIST.*.ASNLINENO' => ['nullable', 'string', 'max:191'],
+            'request.*.SKU_LIST.*.SKU' => ['required', 'string', 'max:191'],
+            'request.*.SKU_LIST.*.ALTERNATE_SKU1' => ['required', 'string', 'max:191'],
+            'request.*.SKU_LIST.*.SKUDESCRC' => ['nullable', 'string', 'max:191'],
+            'request.*.SKU_LIST.*.EXPECTEDQTY_EACH' => ['nullable', 'string', 'max:191'],
+            'request.*.SKU_LIST.*.UOM' => ['nullable', 'string', 'max:191'],
+            'request.*.SKU_LIST.*.LINESTATUS' => ['nullable', 'string', 'max:191'],
+            'request.*.SKU_LIST.*.LOTATT05' => ['nullable', 'string', 'max:191'],
+            'request.*.SKU_LIST.*.USERDEFINE4' => ['nullable', 'string', 'max:191'],
+            'request.*.SKU_LIST.*.USERDEFINE5' => ['nullable', 'string', 'max:191'],
+            'request.*.SKU_LIST.*.USERDEFINE6' => ['nullable', 'string', 'max:191'],
+        ],[],[
+            'request.ASNNO' => 'ASNNO',
+            'request.*.WAREHOUSEID' => 'WAREHOUSEID',
+            'request.*.CUSTOMERID' => 'CUSTOMERID',
+            'request.*.ASNTYPE' => 'ASNTYPE',
+            'request.*.ASNREFERENCE1' => 'ASNREFERENCE1',
+            'request.*.ASNREFERENCE2' => 'ASNREFERENCE2',
+            'request.*.ASNREFERENCE3' => 'ASNREFERENCE3',
+            'request.*.ASNSTATUS' => 'ASNSTATUS',
+            'request.*.NOTES' => 'NOTES',
+            'request.*.USERDEFINE1' => 'USERDEFINE1',
+            'request.*.USERDEFINE2' => 'USERDEFINE2',
+            'request.*.USERDEFINE3' => 'USERDEFINE3',
+            'request.*.SKU_LIST' => 'SKU_LIST',
+            'request.*.SKU_LIST.*.ASNLINENO' => 'SKU_LIST.ASNLINENO',
+            'request.*.SKU_LIST.*.SKU' => 'SKU_LIST.SKU',
+            'request.*.SKU_LIST.*.ALTERNATE_SKU1' => 'SKU_LIST.ALTERNATE_SKU1',
+            'request.*.SKU_LIST.*.SKUDESCRC' => 'SKU_LIST.SKUDESCRC',
+            'request.*.SKU_LIST.*.EXPECTEDQTY_EACH' => 'SKU_LIST.EXPECTEDQTY_EACH',
+            'request.*.SKU_LIST.*.UOM' => 'SKU_LIST.UOM',
+            'request.*.SKU_LIST.*.LINESTATUS' => 'SKU_LIST.LINESTATUS',
+            'request.*.SKU_LIST.*.LOTATT05' => 'SKU_LIST.LOTATT05',
+            'request.*.SKU_LIST.*.USERDEFINE4' => 'SKU_LIST.USERDEFINE4',
+            'request.*.SKU_LIST.*.USERDEFINE5' => 'SKU_LIST.USERDEFINE5',
+            'request.*.SKU_LIST.*.USERDEFINE6' => 'SKU_LIST.USERDEFINE6',
+        ]);
+    }
+
+    /**
+     * 入库回传给WMS
+     */
+    static public function accomplishToWMS(RejectedBill $rejectedBill)
+    {
+        $wmsReceived=WMSReflectReceive::where('ASNREFERENCE3',$rejectedBill['logistic_number_return'])->first();
+        if(!$wmsReceived){
+            (new Controller())->log(__METHOD__,'error_'.__FUNCTION__,'没有WMS入库单');
+            return false;
+        }
+        $orderNumberCode=$wmsReceived['ASNREFERENCE1']??$rejectedBill['order_number'];
+        $skuList=[];
+        $rejectedBill->items()->each(function(RejectedBillItem $item)use($wmsReceived){
+            if($item['is_loaded']){return;}
+            $STATUS=$item['id_quality_label']==1?'ZP':'CC';
+            $sku=$item->wmsReflectSku()->first();
+            $sku="
+                {
+                    \"ORDERNUMBERCODE\": \"{$wmsReceived['ASNNO']}\",
+                    \"ASNLINENO\": \"{$sku['ASNLINENO']}\",
+                    \"SKUCODE\": \"{$sku['SKU']}\",
+                    \"QUANTITY\": \"{$item['amount']}\",
+                    \"LOTATT04\": \"{$sku['LOTATT04']}\",
+                    \"LOTATT05\": \"{$sku['LOTATT05']}\",
+                    \"STATUS\": \"{$STATUS}\",
+                    \"PRODUCTION DATE\": \"{$item['made_at']}\",
+                    \"EXPIRATION DATE\": \"{$item['validity_at']}\",
+                    \"USERDEFINE4\": \"\",
+                    \"USERDEFINE5\": \"\",
+                    \"USERDEFINE6\": \"\",
+                    \"UNIQUE_CODE_LIST\": [
+                        {
+                            \"ORDERNUMBERCODE\": \"{$wmsReceived['ASNNO']}\",
+                            \"SKUCODE\": \"{$sku['SKU']}\",
+                            \"STATUS\": \"{$STATUS}\",
+                            \"PRODUCTION DATE\": \"{$item['made_at']}\",
+                            \"EXPIRATION DATE\": \"{$item['validity_at']}\",
+                            \"LOTATT05\": \"{$sku['LOTATT05']}\",
+                            \"UNIQUE_CODE\": \"\"
+                        }
+                    ]
+                }
+            ";
+            $skuList[]=$sku;
+        });
+        $skuList = implode(',',$skuList);
+        $json="
+{
+    \"request\": [
+        {
+            \"ORDERNUMBERCODE\": \"{$wmsReceived['ASNNO']}\",
+            \"CUSTOMERID\": \"{$rejectedBill->owner()->first()['code']}\",
+            \"ASNTYPE\": \"{$wmsReceived['ASNTYPE']}\",
+            \"ASNREFERENCE1\": \"{$orderNumberCode}\",
+            \"ADDWHO\": \"WCS\",
+            \"USERDEFINE1\": \"\",
+            \"USERDEFINE2\": \"\",
+            \"USERDEFINE3\": \"\",
+            \"SKU_LIST\": [{$skuList}]
+        }
+    ]
+}
+        ";
+        $json = 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);
+        $noIssues=true;
+        $json = json_encode($response->body());
+        if(!$json||!isset($json['response'])||!$json['response']['return']['returnFlag']=='1'){
+            $noIssues=false;
+        }
+        if($noIssues&&$json['response']['return']['returnFlag']=='1'){
+            return true;
+        }
+        (new Controller())->log(__METHOD__,'error_'.__FUNCTION__,$response->body());
+        return false;
+    }
+}

+ 13 - 3
app/Http/Controllers/api/jianshang/RejectedController.php → app/Http/Controllers/api/thirdPart/jianshang/RejectedController.php

@@ -1,7 +1,7 @@
 <?php
 
 
-namespace App\Http\Controllers\api\jianshang;
+namespace App\Http\Controllers\api\thirdPart\jianshang;
 
 
 use App\Http\Controllers\Controller;
@@ -29,7 +29,10 @@ class RejectedController extends Controller
         $json = $this->packSendToRemote($amount,$created_at,$fee_collected,$goods_barcode,
             $goods_name,$logistic_name_return,$logistic_number,$logistic_number_return,$order_number,
             $quality_label,$sender_mobile,$sender_name);
-        if(!$json)return false;
+        if(!$json){
+            $this->log(__METHOD__,'error'.'_'.$logistic_number_return,"没有返回");
+            return false;
+        }
         if(!$json['success']){
             $this->log(__METHOD__,'error'.'_'.$logistic_number_return,"返回错误:".json_encode($json));
             return false;
@@ -61,7 +64,10 @@ class RejectedController extends Controller
     private function packSendToRemote($amount,$created_at,$fee_collected,$goods_barcode,
                                       $goods_name,$logistic_name_return,$logistic_number,$logistic_number_return,$order_number,
                                       $quality_label,$sender_mobile,$sender_name){
-        if(env('api_faking'))return false;
+        if(env('api_faking')){
+            $this->log(__METHOD__,'error_'.__FUNCTION__,'API FAKING');
+            return false;
+        }
         $data="{\"amount\":\"$amount\", \"created_at\":\"$created_at\", \"fee_collected\":\"$fee_collected\",
         \"goods_barcode\":\"$goods_barcode\", \"goods_name\":\"$goods_name\", \"logistic_name_return\":\"$logistic_name_return\",
          \"logistic_number\":\"$logistic_number\", \"logistic_number_return\":\"$logistic_number_return\",
@@ -93,6 +99,10 @@ class RejectedController extends Controller
             $this->log(__METHOD__,'error_'.__FUNCTION__,'回复异常:'.$response->body());
             return false;
         }
+        if(!$response->json()){
+            $this->log(__METHOD__,'error_'.__FUNCTION__,'json为空:'.$response->body());
+            return false;
+        }
         return $response->json();
     }
 

+ 42 - 0
app/Jobs/ProcessReceiveCombined.php

@@ -0,0 +1,42 @@
+<?php
+
+namespace App\Jobs;
+
+use App\Events\WmsReceiveNewEvent;
+use App\Http\Controllers\Controller;
+use App\WMSReflectReceive;
+use App\WMSReflectReceiveSku;
+use Carbon\Carbon;
+use Illuminate\Bus\Queueable;
+use Illuminate\Queue\SerializesModels;
+use Illuminate\Queue\InteractsWithQueue;
+use Illuminate\Contracts\Queue\ShouldQueue;
+use Illuminate\Foundation\Bus\Dispatchable;
+
+class ProcessReceiveCombined implements ShouldQueue
+{
+    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
+
+    protected $logisticNumberReturn;
+    public function __construct($logisticNumberReturn)
+    {
+        $this->logisticNumberReturn=$logisticNumberReturn;
+    }
+
+    /**
+     * Execute the job.
+     *
+     * @return void
+     */
+    public function handle()
+    {
+        $receives=WMSReflectReceive::where('ASNREFERENCE3',$this->logisticNumberReturn)->get();
+        $downloadedItems=[];
+        $receives->each(function (WMSReflectReceive $receive)use(&$downloadedItems){
+            $receive->skus()->each(function(WMSReflectReceiveSku $item)use(&$downloadedItems){
+                $downloadedItems[]=$item;
+            });
+        });
+        event(new WmsReceiveNewEvent($this->logisticNumberReturn,$downloadedItems));
+    }
+}

+ 45 - 0
app/Listeners/InformWMSReceivedListener.php

@@ -0,0 +1,45 @@
+<?php
+
+namespace App\Listeners;
+
+use App\Events\InformWMSReceivedEvent;
+use App\Http\Controllers\Api\thirdPart\flux\ReceiveController;
+use App\Http\Controllers\Controller;
+use App\RejectedBillItem;
+use Illuminate\Queue\InteractsWithQueue;
+use Illuminate\Contracts\Queue\ShouldQueue;
+
+class InformWMSReceivedListener
+{
+    /**
+     * Create the event listener.
+     *
+     * @return void
+     */
+    public function __construct()
+    {
+        //
+    }
+
+    /**
+     * Handle the event.
+     *
+     * @param  InformWMSReceivedEvent  $event
+     * @return void
+     */
+    public function handle(InformWMSReceivedEvent $event)
+    {
+        $rejectedBill=$event->rejectedBill;
+        $hasAccomplishedToWMS=ReceiveController::accomplishToWMS($rejectedBill);
+        if(!$hasAccomplishedToWMS){
+            (new Controller())->log(__METHOD__, 'error_' . __FUNCTION__, $rejectedBill->toJson());
+            return ;
+        }
+        $rejectedBill['is_loaded']=true;
+        $rejectedBill->items->each(function(RejectedBillItem $item){
+            $item['is_loaded']=true;
+            $item->save();
+        });
+        $rejectedBill->save();
+    }
+}

+ 72 - 0
app/Listeners/WmsReceiveNewListener.php

@@ -0,0 +1,72 @@
+<?php
+
+namespace App\Listeners;
+
+use App\Events\InformWMSReceivedEvent;
+use App\Events\WmsReceiveNewEvent;
+use App\Http\Controllers\Controller;
+use App\Jobs\ProcessReceiveCombined;
+use App\Owner;
+use App\RejectedBill;
+use App\RejectedBillItem;
+use App\WMSReflectReceive;
+use App\WMSReflectReceiveSku;
+use Illuminate\Queue\InteractsWithQueue;
+use Illuminate\Contracts\Queue\ShouldQueue;
+use Illuminate\Support\Collection;
+
+class WmsReceiveNewListener
+{
+    /**
+     * Create the event listener.
+     *
+     * @return void
+     */
+    public function __construct()
+    {
+        //
+    }
+
+    /**
+     * Handle the event.
+     *
+     * @param  WmsReceiveNewEvent  $event
+     * @return void
+     */
+    public function handle(WmsReceiveNewEvent $event)
+    {
+        $logisticNumberReturn=$event->logisticNumberReturn;
+        $downloadedSkuItems=$event->downloadedSkuItems;
+        $this->handleJianshang($logisticNumberReturn,$downloadedSkuItems);
+    }
+    private function handleJianshang($logisticNumberReturn,$downloadedSkuItems){
+        $bills=RejectedBill::where('logistic_number_return',$logisticNumberReturn)->
+            where('is_loaded',false)->get();
+        if($bills->isEmpty()){//没有本地货单
+            (new Controller())->log(__METHOD__,  __FUNCTION__, 'bill isEmpty, wait for Reject Record, $logisticNumberReturn:'.$logisticNumberReturn);
+            return;
+        }
+        //找得到本地单,(未入库的)
+        $actualGotItems=(function()use($bills){
+            $items=[];
+            $bills->each(function (RejectedBill $bill)use(&$items){
+                $bill->items()->each(function (RejectedBillItem $item)use(&$items){
+                    $items[]=$item;
+                });
+            });
+            return new Collection($items);
+        })();
+        $itemsReceivedOverDownloaded=WMSReflectReceiveSku::itemsOverDownloadedSkus($actualGotItems,$downloadedSkuItems);
+
+
+        if(!$itemsReceivedOverDownloaded){//实收小于等于下发(下发大于等于实收),入库
+            foreach ($bills as $bill){
+                if($bill['is_loaded']===false)
+                    event(new InformWMSReceivedEvent($bill));
+            }
+            return;
+        }
+        //(下发小于实收),不入库,推入任务,13小时后重新执行本事件
+        ProcessReceiveCombined::dispatch($logisticNumberReturn)->delay(now()->addHours(13));
+    }
+}

+ 6 - 6
app/Providers/EventServiceProvider.php

@@ -15,15 +15,15 @@ class EventServiceProvider extends ServiceProvider
      * @var array
      */
     protected $listen = [
-//        Registered::class => [
-//            SendEmailVerificationNotification::class,
-//        ],
-//        \App\Events\CancelOrder::class => [
-//            \App\Listeners\BroadcastCancelOrder::class,
-//        ],
         'App\Events\WaybillPriceModelEvent' => [
             'App\Listeners\WaybillPriceModelListener',
         ],
+        'App\Events\WmsReceiveNewEvent' => [
+            'App\Listeners\WmsReceiveNewListener',
+        ],
+        'App\Events\InformWMSReceivedEvent' => [
+            'App\Listeners\InformWMSReceivedListener',
+        ],
     ];
 
     /**

+ 5 - 0
app/Providers/RouteServiceProvider.php

@@ -75,5 +75,10 @@ class RouteServiceProvider extends ServiceProvider
              ->middleware('apiLocal')
              ->namespace($this->namespace)
              ->group(base_path('routes/apiLocal.php'));
+
+        Route::prefix('api/thirdPart/flux')
+            ->middleware('api')
+            ->namespace('App\Http\Controllers\Api\thirdPart\flux')
+            ->group(base_path('routes/api/thirdPart/flux.php'));
     }
 }

+ 3 - 0
app/RejectedBillItem.php

@@ -20,6 +20,9 @@ class RejectedBillItem extends Model
     public function rejectedBill(){
         return $this->belongsTo('App\RejectedBill', 'id_rejected_bill', 'id');
     }
+    public function wmsReflectSku(){
+        return $this->hasOne('App\WMSReflectReceiveSku', 'ALTERNATE_SKU1', 'barcode_goods');
+    }
     public function injectCommodityName(){
         if(!$this['name_goods'])return;
         $barcode=$this['barcode_goods'];

+ 42 - 0
app/WMSReflectReceive.php

@@ -0,0 +1,42 @@
+<?php
+
+namespace App;
+
+use Illuminate\Database\Eloquent\Model;
+use Illuminate\Support\Collection;
+
+class WMSReflectReceive extends Model
+{
+    protected $fillable=['ASNNO','WAREHOUSEID','CUSTOMERID','ASNTYPE','ASNREFERENCE1',
+        'ASNREFERENCE2','ASNREFERENCE3','NOTES','USERDEFINE1','USERDEFINE2','USERDEFINE3'];
+    function skus(){
+        return $this->hasMany('App\WMSReflectReceiveSku','wms_receive_id','id');
+    }
+    function bill(){
+        return $this->belongsTo('App\RejectedBill','ASNREFERENCE3','logistic_number_return');
+    }
+
+    /**
+     * @param $logisticNumberReturn
+     * @return Collection
+     */
+    static function downloadedSkus($logisticNumberReturn){
+        $wmsReceives=WMSReflectReceive::with('skus.item')->where('ASNREFERENCE3',$logisticNumberReturn)->get();
+        $downloadedItems=[];
+        foreach ($wmsReceives as $wmsReceive){
+            $wmsReceive->skus()->each(function (WMSReflectReceiveSku $sku)use(&$downloadedItems){
+                $repeated=false;
+                foreach($downloadedItems as $item){
+                    if($item['ALTERNATE_SKU1']==$sku['ALTERNATE_SKU1']){
+                        $repeated=true;
+                        break;
+                    }
+                }
+                if(!$repeated){
+                    $downloadedItems[]=$sku;
+                }
+            });
+        }
+        return new Collection($downloadedItems);
+    }
+}

+ 32 - 0
app/WMSReflectReceiveSku.php

@@ -0,0 +1,32 @@
+<?php
+
+namespace App;
+
+use Illuminate\Database\Eloquent\Model;
+
+class WMSReflectReceiveSku extends Model
+{
+    protected $fillable=['ASNLINENO','SKU','ALTERNATE_SKU1','SKUDESCRC','EXPECTEDQTY_EACH',
+        'LOTATT05','USERDEFINE4','USERDEFINE5','USERDEFINE6'];
+    function receives(){
+        return $this->belongsTo('App\WMSReflectReceive','wms_receive_id');
+    }
+
+    static function itemsOverDownloadedSkus($actualGotItems, $downloadedItems){
+        foreach ($actualGotItems as $item){
+            $isInDownloaded=false;
+            foreach ($downloadedItems as $sku){
+                if($item&&$item['is_loaded'])continue;
+                if($item['barcode_goods']==$sku['ALTERNATE_SKU1']){
+                    $isInDownloaded=true;
+                    break;
+                }
+            }
+            if(!$isInDownloaded){
+                dd($item,$downloadedItems);
+                return true;
+            }
+        }
+        return false;
+    }
+}

+ 5 - 0
config/api.php

@@ -7,4 +7,9 @@ return [
     'fakingUrl_rejected_send_jianshang' => '/api/rejected/jianshang/send',
     'sign_key_rejected_send_jianshang' => 'ymgYuN01D3UCZneZ53wGC0suOIUPmLgY',
 
+
+    /** Flux
+    https://was.baoshi56.com/api/thirdPart/flux/receive/new  //新增收货
+     **/
+    'receiveAccomplishToWMS_flux' => 'http://47.103.72.58:19199/datahub/FluxBSJsonApi/RECECF?messageId=RECECF', //通知WMS完成的订单收货
 ];

+ 43 - 0
database/migrations/2019_12_16_140649_create_w_m_s_reflect_receives_table.php

@@ -0,0 +1,43 @@
+<?php
+
+use Illuminate\Support\Facades\Schema;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Database\Migrations\Migration;
+
+class CreateWMSReflectReceivesTable extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::create('w_m_s_reflect_receives', function (Blueprint $table) {
+            $table->bigIncrements('id');
+            $table->string('ASNNO')->index()->comment('WMS订单号');
+            $table->string('WAREHOUSEID')->index()->comment('仓库编号');
+            $table->string('CUSTOMERID')->index()->comment('货主编号');
+            $table->string('ASNTYPE')->nullable()->comment('订单类型');
+            $table->string('ASNREFERENCE1')->index()->comment('客户订单号');
+            $table->string('ASNREFERENCE2')->nullable()->comment('出库单号');
+            $table->string('ASNREFERENCE3')->index()->nullable()->comment('退货快递单号');
+            $table->string('ASNSTATUS')->nullable()->comment('');
+            $table->string('NOTES')->nullable()->comment('备注');
+            $table->string('USERDEFINE1')->nullable();
+            $table->string('USERDEFINE2')->nullable();
+            $table->string('USERDEFINE3')->nullable();
+            $table->timestamps();
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::dropIfExists('w_m_s_reflect_receives');
+    }
+}

+ 43 - 0
database/migrations/2019_12_16_142443_create_w_m_s_reflect_receive_skus_table.php

@@ -0,0 +1,43 @@
+<?php
+
+use Illuminate\Support\Facades\Schema;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Database\Migrations\Migration;
+
+class CreateWMSReflectReceiveSkusTable extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::create('w_m_s_reflect_receive_skus', function (Blueprint $table) {
+            $table->bigIncrements('id');
+            $table->integer('wms_receive_id')->index();
+            $table->string('ASNLINENO')->nullable();
+            $table->string('SKU')->index();
+            $table->string('ALTERNATE_SKU1')->index()->comment('条码');
+            $table->string('SKUDESCRC')->nullable()->comment('产品名称');
+            $table->string('EXPECTEDQTY_EACH')->nullable()->comment('预期收货数量');
+            $table->string('UOM')->nullable()->comment('单位');
+            $table->string('LINESTATUS')->nullable();
+            $table->string('LOTATT05')->nullable()->comment('ERP属性仓');
+            $table->string('USERDEFINE4')->nullable();
+            $table->string('USERDEFINE5')->nullable();
+            $table->string('USERDEFINE6')->nullable();
+            $table->timestamps();
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::dropIfExists('w_m_s_reflect_receive_skus');
+    }
+}

+ 36 - 0
database/migrations/2019_12_29_172742_create_jobs_table.php

@@ -0,0 +1,36 @@
+<?php
+
+use Illuminate\Support\Facades\Schema;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Database\Migrations\Migration;
+
+class CreateJobsTable extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::create('jobs', function (Blueprint $table) {
+            $table->bigIncrements('id');
+            $table->string('queue')->index();
+            $table->longText('payload');
+            $table->unsignedTinyInteger('attempts');
+            $table->unsignedInteger('reserved_at')->nullable();
+            $table->unsignedInteger('available_at');
+            $table->unsignedInteger('created_at');
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::dropIfExists('jobs');
+    }
+}

+ 9 - 4
resources/views/rejected/create.blade.php

@@ -168,7 +168,7 @@
                                         <label for="is_loaded" class="col-form-label text-right">是否入库</label>
                                         <div v-if="status.isLoadSign" class="text-danger">系统标计为入库</div>
                                         <select name="is_loaded" id="is_loaded" class="form-control" :class="[errors.is_loaded?'is-invalid':'']"
-                                                data-focusOrder="8"
+                                                data-focusOrder="8" :disabled="status.lockingIsLoadedInput"
                                                 v-model="billInputting.is_loaded" required>
                                             <option value="0">否</option>
                                             <option value="1">是</option>
@@ -368,7 +368,7 @@
             data:{
                 status: {billCreating:true,billEditing:false,itemCreating:true,itemEditing:false
                     ,editingBill:null,editingBillId:'',editingItem:null,editingItemId:''
-                    ,inputtingId_owner:'',endAndPackCommitEdited:false,lockingBillPanel:false,
+                    ,inputtingId_owner:'',endAndPackCommitEdited:false,lockingBillPanel:false,lockingIsLoadedInput:false,
                 existItemsBeforeAdd:0},
                 itemInputting:{
                     barcode_goods:"",name_goods:"",amount:"1",id_quality_label:"",
@@ -695,15 +695,19 @@
                     let url='{{url('apiLocal/rejectedBillItem/packConfirm')}}';
                     axios.post(url,{'ids':ids}).then(function (response) {
                         _this.cleanError();
-                        if(response&&response.data&&response.data.success==='true'){
+                        if(response&&response.data&&response.data.success!=='false'){
                             if(typeof(response.data.bill_is_loaded)!='undefined'){
                                 if(response.data.bill_is_loaded===true){
                                     _this.status.editingBill.is_loaded=1;
                                     _this.billInputting.is_loaded=1;
                                     _this.billInputting.isLoadSign=true;
-                                    tempTip.okWindow('客户系统返回,该批商品状态为“入库”','已处理');
+                                    // _this.status.lockingIsLoadedInput=true;
+                                    tempTip.okWindow('该批商品状态已改为“入库”','已处理');
                                 }
                             }
+                            if(response.data.success==='uploadedToWms'){
+                                _this.billInputting.is_loaded=1;
+                            }
                             tempTip.showSuccess('成功录入所有退单商品并已上传至外部');
                             _this.status.endAndPackCommitEdited=true;
                             _this.cancelPackCommitEdit();
@@ -894,6 +898,7 @@
                     this.cleanHeader();
                     this.status.billCreating=true;
                     this.status.billEditing=false;
+                    this.status.editingBill=null;
                     this.rejectedBills.forEach(function(rejectedBill){
                         if(rejectedBill.isEditing===true){
                             rejectedBill.isEditing=false;

+ 2 - 2
resources/views/rejected/edit.blade.php

@@ -172,7 +172,7 @@
                                     <div class="form-group mb-0">
                                         <label for="is_loaded" class="col-form-label text-right">是否入库</label>
                                         <select name="is_loaded" id="is_loaded" class="form-control" :class="[errors.is_loaded?'is-invalid':'']"
-                                                data-focusOrder="8"
+                                                data-focusOrder="8" :disabled="status.lockingIsLoadedInput"
                                                 v-model="billInputting.is_loaded" required>
                                             <option value="0">否</option>
                                             <option value="1">是</option>
@@ -369,7 +369,7 @@
             data:{
                 status: {billCreating:true,billEditing:false,itemCreating:true,itemEditing:false
                     ,editingBill:null,editingBillId:'',editingItem:null,editingItemId:''
-                    ,inputtingId_owner:'',endAndPackCommitEdited:false,lockingBillPanel:false,
+                    ,inputtingId_owner:'',endAndPackCommitEdited:false,lockingBillPanel:false,lockingIsLoadedInput:false,
                 existItemsBeforeAdd:0},
                 itemInputting:{
                     barcode_goods:"",name_goods:"",amount:"1",id_quality_label:"",

+ 12 - 0
routes/api/thirdPart/flux.php

@@ -0,0 +1,12 @@
+<?php
+
+use Illuminate\Http\Request;
+
+
+/*
+文件地址前缀:/api/thirdPart/flux/receive
+*/
+Route::prefix('receive')->group(function(){
+    Route::post('new', "ReceiveController@new_");//增加新波次消息
+    //accomplishToWMS() 发往WMS的完成单
+});