Parcourir la source

Merge branch 'master' into waybill_ZD

# Conflicts:
#	app/Http/Controllers/TestController.php
Zhouzhendong il y a 6 ans
Parent
commit
32123717a2
39 fichiers modifiés avec 513 ajouts et 205 suppressions
  1. 68 1
      app/Commodity.php
  2. 10 0
      app/CommodityBarcode.php
  3. 3 10
      app/Events/InformWMSReceivedEvent.php
  4. 85 0
      app/Http/Controllers/CommodityBarcodeController.php
  5. 5 1
      app/Http/Controllers/CommodityController.php
  6. 9 0
      app/Http/Controllers/Controller.php
  7. 4 4
      app/Http/Controllers/PackageController.php
  8. 1 1
      app/Http/Controllers/ProcessController.php
  9. 26 13
      app/Http/Controllers/RejectedBillItemController.php
  10. 52 47
      app/Http/Controllers/StoreController.php
  11. 23 19
      app/Http/Controllers/TestController.php
  12. 1 1
      app/Http/Controllers/WaybillFinancialSnapshotsController.php
  13. 1 1
      app/Http/Controllers/WaybillsController.php
  14. 1 1
      app/Http/Controllers/WeighExceptedController.php
  15. 31 22
      app/Http/Controllers/api/thirdPart/flux/ReceiveController.php
  16. 5 15
      app/Http/Controllers/api/thirdPart/flux/StoreController.php
  17. 2 1
      app/Http/Controllers/api/thirdPart/jianshang/RejectedController.php
  18. 7 3
      app/Imports/CommodityImport.php
  19. 4 4
      app/Jobs/ProcessReceiveCombinedJob.php
  20. 9 5
      app/Listeners/InformWMSReceivedListener.php
  21. 20 14
      app/Listeners/WmsReceiveNewListener.php
  22. 1 0
      app/Package.php
  23. 9 5
      app/RejectedBillItem.php
  24. 13 5
      app/User.php
  25. 1 0
      config/api.php
  26. 1 1
      config/database.php
  27. 2 1
      config/users.php
  28. 12 0
      database/factories/CommodityBarcodeFactory.php
  29. 1 0
      database/migrations/2019_08_20_134833_create_logs_table.php
  30. 3 3
      database/migrations/2019_11_27_181556_create_commodities_table.php
  31. 7 2
      database/migrations/2020_03_25_164834_change_commodities_table.php
  32. 1 1
      database/migrations/2020_03_25_182324_add_process_authority.php
  33. 33 0
      database/migrations/2020_03_30_103931_create_commodity_barcodes_table.php
  34. 35 0
      database/migrations/2020_03_30_112202_drop_commodity_barcode_column_to_barcode_table.php
  35. 1 2
      public/t.php
  36. 3 0
      resources/views/store/fast/create.blade.php
  37. 1 1
      resources/views/weight/package/index.blade.php
  38. 20 21
      resources/views/weight/package/statistics.blade.php
  39. 2 0
      routes/web.php

+ 68 - 1
app/Commodity.php

@@ -2,9 +2,76 @@
 
 namespace App;
 
+use Illuminate\Database\Eloquent\Builder;
 use Illuminate\Database\Eloquent\Model;
 
 class Commodity extends Model
 {
-    protected $fillable=['barcode','name','sku','owner_id'];
+    protected $fillable=['name','sku','owner_id'];
+    protected $appends=['barcode','owner_name'];
+
+    public function barcodes()
+    {
+        return $this->hasMany('\App\CommodityBarcode');
+    }
+    public function owner(){
+        return $this->belongsTo('App\Owner','owner_id','id');
+    }
+    public function getBarcodeAttribute(){
+        return $this->barcodes()->first()['code'];
+    }
+    public function getOwnerNameAttribute(){
+        return $this->owner()->first()['name'];
+    }
+    static function newCommodityBy_BarcodeOwnerIdNameSku($barcode,$ownerId,$name,$sku){
+        $barcodes=rtrim($barcode,',');
+        $barcodes=explode(',',$barcodes);
+        foreach ($barcodes as $k=>$barcode){
+            if(!trim($barcode)) unset($barcodes[$k]);
+        }
+
+        $commodities=[];
+        foreach ($barcodes as $barcode){
+            if(!trim($barcode))continue;
+            $commodity=Commodity::whereHas('barcodes', function (Builder $query)use($barcode){
+                $query->where('code',$barcode);
+            })->where('name',$name)->where('owner_id',$ownerId)->first();
+            if($commodity)$commodities[]=$commodity;
+        }
+
+        if(count($barcodes)==count($commodities)&&count($commodities)>0){//过滤掉仅有一个条码相等的。
+            $commodity=$commodities[0];
+        }else{
+            $commodity=null;
+        }
+
+        if(!$commodity){
+            $commodity=new Commodity(['name'=>$name,'sku'=>$sku,'owner_id'=>$ownerId]);
+            $commodity->save();
+        }else{
+            if(!isset($commodity['name'])||(!isset($commodity['sku'])||$sku)){
+                $commodity['name']=$name;
+                $commodity['sku']=$sku;
+                $commodity->save();
+            }
+        }
+        foreach ($barcodes as $barcode){
+            if(!trim($barcode))continue;
+//            if(preg_match('/[\x{4e00}-\x{9fa5}]/u',$barcode))continue;
+            $commodityBarcode=CommodityBarcode::where('code',$barcode)->where('commodity_id',$commodity['id'])->first();
+            if(!$commodityBarcode){
+                $commodityBarcode=new CommodityBarcode(['code'=>$barcode,'commodity_id'=>$commodity['id']]);
+                $commodityBarcode->save();
+            }
+        }
+        return $commodity;
+    }
+
+    public function newBarcode($barcode){
+        $commodityBarcode=CommodityBarcode::where('commodity_id',$this['id'])->where('code',$barcode)->first();
+        if(!$commodityBarcode){
+            $commodityBarcode=new CommodityBarcode(['commodity_id'=>$this['id'],'code'=>$barcode]);
+            $commodityBarcode->save();
+        }
+    }
 }

+ 10 - 0
app/CommodityBarcode.php

@@ -0,0 +1,10 @@
+<?php
+
+namespace App;
+
+use Illuminate\Database\Eloquent\Model;
+
+class CommodityBarcode extends Model
+{
+    protected $fillable=['code','commodity_id'];
+}

+ 3 - 10
app/Events/InformWMSReceivedEvent.php

@@ -2,14 +2,12 @@
 
 namespace App\Events;
 
+use App\Http\Controllers\Controller;
 use App\Listeners\InformWMSReceivedListener;
-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;
+use Illuminate\Support\Facades\Auth;
 
 class InformWMSReceivedEvent
 {
@@ -22,17 +20,12 @@ class InformWMSReceivedEvent
     }
     public function directRun()
     {
+        if(config('jianshang_rejecteds_log_switch'))Controller::logS(__METHOD__,__FUNCTION__,'直接调用推送WMS事件,退单号:'.$this->rejectedBill['logistic_number_return'],Auth::user()['id']);
         return (new InformWMSReceivedListener())->handle($this);
     }
 
 }
 
 
-//撞车了
-//下雨了
-
 //通知WMS接收
 
-
-//onclick 点击事件发生
-//onmouseover 鼠标滑入发生

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

@@ -0,0 +1,85 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use App\CommodityBarcode;
+use Illuminate\Http\Request;
+
+class CommodityBarcodeController 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\CommodityBarcode  $commodityBarcode
+     * @return \Illuminate\Http\Response
+     */
+    public function show(CommodityBarcode $commodityBarcode)
+    {
+        //
+    }
+
+    /**
+     * Show the form for editing the specified resource.
+     *
+     * @param  \App\CommodityBarcode  $commodityBarcode
+     * @return \Illuminate\Http\Response
+     */
+    public function edit(CommodityBarcode $commodityBarcode)
+    {
+        //
+    }
+
+    /**
+     * Update the specified resource in storage.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @param  \App\CommodityBarcode  $commodityBarcode
+     * @return \Illuminate\Http\Response
+     */
+    public function update(Request $request, CommodityBarcode $commodityBarcode)
+    {
+        //
+    }
+
+    /**
+     * Remove the specified resource from storage.
+     *
+     * @param  \App\CommodityBarcode  $commodityBarcode
+     * @return \Illuminate\Http\Response
+     */
+    public function destroy(CommodityBarcode $commodityBarcode)
+    {
+        //
+    }
+}

+ 5 - 1
app/Http/Controllers/CommodityController.php

@@ -5,6 +5,7 @@ namespace App\Http\Controllers;
 use App\Commodity;
 use App\Imports\CommodityImport;
 use Exception;
+use Illuminate\Database\Eloquent\Builder;
 use Illuminate\Http\Request;
 use Illuminate\Http\Response;
 use Illuminate\Support\Facades\Auth;
@@ -49,6 +50,7 @@ class CommodityController extends Controller
         $this->validatorCreate($request->all())->validate();
         $commodity=new Commodity($request->all());
         $commodity->save();
+        $commodity->newBarcode($request->input('barcode'));
 
         $this->log(__METHOD__,__FUNCTION__,json_encode($request->toArray()),Auth::user()['id']);
         return redirect('maintenance/commodity/create')->with('successTip',"成功录入商品信息:“{$request->input('name')}”");
@@ -153,7 +155,9 @@ class CommodityController extends Controller
         $barcode=$request->input('barcode');
         $name = '';
         if($barcode){
-            $commodity=Commodity::where('barcode',$barcode)->first();
+            $commodity=Commodity::whereHas('barcodes', function (Builder $query)use($barcode){
+                $query->where('code',$barcode);
+            })->first();
             if($commodity&&$commodity['name']) $name=$commodity['name'];
         }
         return ['success'=>'true','name'=>$name];

+ 9 - 0
app/Http/Controllers/Controller.php

@@ -16,6 +16,15 @@ use Zttp\Zttp;
 class Controller extends BaseController
 {
     use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
+    static public function logS($method,$type,$description,$id_user=null){
+        (new Log([
+            'operation'=>$method,
+            'type'=>$type,
+            'description'=>$description,
+            'id_user'=>$id_user,
+            'ip'=>Request::ip()
+        ]))->save();
+    }
     public function log($method,$type,$description,$id_user=null){
         (new Log([
             'operation'=>$method,

+ 4 - 4
app/Http/Controllers/PackageController.php

@@ -234,10 +234,10 @@ class PackageController extends Controller
 
     public function export($id,Request $request){
         if(!Gate::allows('称重管理-查询')){ return '没有权限';  }
+        ini_set('max_execution_time',3500);
+        ini_set('memory_limit','3526M');
         if ($id==-1){
             $id=[];
-            ini_set('max_execution_time',2500);
-            ini_set('memory_limit','1526M');
             $packages=Package::select('id');
             $packages=$this->conditionQuery($request,$packages);
             $packages=$packages->get();
@@ -291,7 +291,7 @@ class PackageController extends Controller
             ];
             $list[$i]=$w;
         }
-        return Excel::download(new WaybillExport($row,$list),date('YmdHis', time()).'-称重记录单.xls');
+        return Excel::download(new WaybillExport($row,$list),date('YmdHis', time()).'-称重记录单.xlsx');
     }
     protected function validator(Request $request){
         $validator=Validator::make($request->input(),[
@@ -376,7 +376,7 @@ class PackageController extends Controller
                 $i++;
             }
         }
-        return Excel::download(new WaybillExport($row,$list),date('YmdHis', time()).'-称重统计记录单.xls');
+        return Excel::download(new WaybillExport($row,$list),date('YmdHis', time()).'-称重统计记录单.xlsx');
     }
 
 

+ 1 - 1
app/Http/Controllers/ProcessController.php

@@ -781,7 +781,7 @@ class ProcessController extends Controller
                 $i++;
             }
         }
-        return Excel::download(new WaybillExport($row,$list),date('YmdHis', time()).'-二次加工单.xls');
+        return Excel::download(new WaybillExport($row,$list),date('YmdHis', time()).'-二次加工单.xlsx');
     }
 
     public function validatorProcessContent(array $processContent){

+ 26 - 13
app/Http/Controllers/RejectedBillItemController.php

@@ -78,6 +78,7 @@ class RejectedBillItemController extends Controller
         $this->log(__METHOD__,__FUNCTION__,json_encode($request->toArray()),Auth::user()['id']);
         return ['success'=>'true','id'=>$rejectedBillItem['id']];
     }
+
     public function apiUpdate(Request $request)
     {
         if(!Gate::allows('退货管理-编辑')){
@@ -150,6 +151,7 @@ class RejectedBillItemController extends Controller
         }
         $item=$rejectedBillItems->first();
         $rejectedBill = RejectedBill::find($item['id_rejected_bill']);
+        if(config('jianshang_rejecteds_log_switch'))Controller::logS(__METHOD__,__FUNCTION__,'请求处理退单:'.$rejectedBill['logistic_number_return'],Auth::user()['id']);
         $downloadedSkus = WMSReflectReceive::downloadedSkus($rejectedBill['logistic_number_return'],true);
         $isGotMoreThenDownloaded=WMSReflectReceiveSku::isItemsOverDownloadedSkus($rejectedBillItems,$downloadedSkus);
         $isJianshang=(function($rejectedBill){
@@ -159,29 +161,32 @@ class RejectedBillItemController extends Controller
             }
             return false;
         })($rejectedBill);
+        if(config('jianshang_rejecteds_log_switch'))Controller::logS(__METHOD__,__FUNCTION__,"当前,实收件:(".json_encode($rejectedBillItems).")},下载件:("
+            .json_encode($downloadedSkus).")},退单号:{$rejectedBill['logistic_number_return']}",null);
+
 
-        if(!$isGotMoreThenDownloaded
-            && !($rejectedBill['is_loaded']==1||$rejectedBill['is_loaded']===null)
-                &&config('api.api_switch_receive_to_wms')){
-            $informed=(new InformWMSReceivedEvent($rejectedBill))->directRun();
+
+        if(!$isGotMoreThenDownloaded    //没有录入超过下载货物数
+            && !($rejectedBill['is_loaded']==1||$rejectedBill['is_loaded']===null)//并且不是已入库或无需入库
+            &&config('api.api_switch_receive_to_wms')){ //并且配置开
+            if(config('jianshang_rejecteds_log_switch'))Controller::logS(__METHOD__,__FUNCTION__,'满足条件,准备从网页主动请求富勒入库:'.$rejectedBill['logistic_number_return'],Auth::user()['id']);
+            $informed=(new InformWMSReceivedEvent($rejectedBill))->directRun();  //!!!!
             if(!$informed)return ['success'=>'false','fail_info'=>'提交至WMS错误,请重试并通知相关人员'];
             $isLoaded=false;
             if($isJianshang){
                 $isLoaded=true;
             }
+            if(config('jianshang_rejecteds_log_switch'))Controller::logS(__METHOD__,__FUNCTION__,'标记前端是否入库为:'.$isLoaded,Auth::user()['id']);
             return ['success'=>'true','bill_is_loaded'=>$isLoaded];
         }
 
-//        if($isJianshang){
-//            $resultStr=$this->sendRejectedToThirdPart($rejectedBillItems,$rejectedBill);
-//            if(!$resultStr)return ['success'=>'false','fail_info'=>"记录没有发送成功"];
-//        }
         $remoteResultStr='';
         if($isJianshang){
-            $remoteResultStr=$this->sendRejectedToThirdPart2($rejectedBillItems,$rejectedBill);
+            if(config('jianshang_rejecteds_log_switch'))Controller::logS(__METHOD__,__FUNCTION__,"不满足入库条件,准备发送给笕尚处理,退单号:{$rejectedBill['logistic_number_return']}",Auth::user()['id']);
+            $remoteResultStr=$this->sendRejectedToThirdPart2($rejectedBillItems,$rejectedBill);//不能入库所以发送给笕尚处理   !!!!
         }
 
-        $this->log(__METHOD__,__FUNCTION__.'_'.$rejectedBill['id'],json_encode($request->toArray()),Auth::user()['id']);
+        if(config('jianshang_rejecteds_log_switch'))Controller::logS(__METHOD__,__FUNCTION__,"前端退单处理请求完成:笕尚入库状态为:{$remoteResultStr},退单号: {$rejectedBill['logistic_number_return']},退单ID:{$rejectedBill['id']},form表单:".json_encode($request->toArray()),Auth::user()['id']);
         return ['success'=>'true','remote_result'=>$remoteResultStr];
     }
 
@@ -217,7 +222,9 @@ class RejectedBillItemController extends Controller
     }
 
     public function sendRejectedToThirdPart2(Collection $items,$rejectedBill):bool {
+        if(config('jianshang_rejecteds_log_switch'))Controller::logS(__METHOD__,__FUNCTION__,"进入发送方法,发送给笕尚处理,退单号:{$rejectedBill['logistic_number_return']}",Auth::user()['id']);
         if($rejectedBill['is_loaded']!=0){
+            if(config('jianshang_rejecteds_log_switch'))Controller::logS(__METHOD__,__FUNCTION__,"进入发送方法,但退单已入库,跳出!退单号:{$rejectedBill['logistic_number_return']}",Auth::user()['id']);
             return true;
         }
         $rejected=new Rejected();
@@ -228,13 +235,17 @@ class RejectedBillItemController extends Controller
         });
         $rejectedJianshang=new api\thirdPart\jianshang\RejectedController();
         $rejected['goodses']=$goodses;
-        $resultStr= $rejectedJianshang->sendRejected2($rejected);
+        if(config('jianshang_rejecteds_log_switch'))Controller::logS(__METHOD__,__FUNCTION__,"进入发送方法,将商品转成数组,准备进入接口!退单号:{$rejectedBill['logistic_number_return']}",Auth::user()['id']);
+        $resultStr= $rejectedJianshang->sendRejected2($rejected);   //!!!
+
+        if(config('jianshang_rejecteds_log_switch'))Controller::logS(__METHOD__,__FUNCTION__,"发送笕尚取得结果是:{$resultStr}!退单号:{$rejectedBill['logistic_number_return']}",Auth::user()['id']);
         if($resultStr=='fail'){
-            $this->log(__METHOD__,'error_'.__FUNCTION__.'_'.$rejectedBill['id'],"记录没有发送成功".json_encode($rejected),Auth::user()['id']);
+            if(config('jianshang_rejecteds_log_switch'))Controller::logS(__METHOD__,__FUNCTION__,"发送失败,笕尚取得结果是:{$resultStr}!返回前端。退单号:{$rejectedBill['logistic_number_return']}",Auth::user()['id']);
             return $resultStr;
         }
         //
         if($resultStr=='storable'){
+            if(config('jianshang_rejecteds_log_switch'))Controller::logS(__METHOD__,__FUNCTION__,"发送成功,可入,但待推单,笕尚取得结果是:{$resultStr}!返回前端。退单号:{$rejectedBill['logistic_number_return']}",Auth::user()['id']);
             $rejectedBill = RejectedBill::find($rejectedBill['id']);
             $rejectedBill->is_loaded=2;
             $rejectedBill->save();
@@ -243,14 +254,16 @@ class RejectedBillItemController extends Controller
                 $item->save();
             });
 
+            if(config('jianshang_rejecteds_log_switch'))Controller::logS(__METHOD__,__FUNCTION__,"标记退单和商品为待推单!退单号:{$rejectedBill['logistic_number_return']}",Auth::user()['id']);
             //标记WMS所有该退单下的作废(为已上传) 。应检查这里是否正确!
             $receives=WMSReflectReceive::where('ASNREFERENCE3',$rejectedBill['logistic_number_return'])->where('is_uploaded',0)->get();
             $receives->each(function ($receive){
                 $receive['is_uploaded']=1;
                 $receive->save();
             });
+            if(config('jianshang_rejecteds_log_switch'))Controller::logS(__METHOD__,__FUNCTION__,"标记退单在WMS映身表为已上传!退单号:{$rejectedBill['logistic_number_return']}",Auth::user()['id']);
         }
-        $this->log(__METHOD__,__FUNCTION__.'_'.$rejectedBill['id'].$resultStr,json_encode($rejected),Auth::user()['id']);
+        if(config('jianshang_rejecteds_log_switch'))Controller::logS(__METHOD__,__FUNCTION__,"处理完成,返回前端入库状态,标记笕尚取得结果是:{$resultStr}!退单号:{$rejectedBill['logistic_number_return']}",Auth::user()['id']);
         return $resultStr;
     }
 

+ 52 - 47
app/Http/Controllers/StoreController.php

@@ -62,55 +62,58 @@ class StoreController extends Controller
             ]);
             $owner->save();
         }
-        $store=new Store([
-            'asn_code'=>$WMSReflectReceive->ASNNO,
-            'warehouse_id'=>$warehouse->id,
-            'owner_id'=>$owner->id,
-            'stored_method'=>'快速入库',
-            'status'=>'未入库',
-            'remark'=>$WMSReflectReceive->NOTES,
-        ]);
-        $store->save();
-
-        $customDepository=(function()use($request){
-            $customDepository=Depository::where('code',$request->input('depository_code'))->first();
-            if($request->input('depository_code')){
-                if (!$customDepository){
-                    $depository=new Depository([
-                        'name'=>$request->input('depository_code'),
-                        'code'=>$request->input('depository_code')
-                    ]);
-                    $depository->save();
-                }
-            }
-            return $customDepository;
-        })();
+        $store=Store::where('asn_code',$WMSReflectReceive->ASNNO)->first();
+        if(!$store){
+            $store=new Store([
+                'asn_code'=>$WMSReflectReceive->ASNNO,
+                'warehouse_id'=>$warehouse->id,
+                'owner_id'=>$owner->id,
+                'stored_method'=>'快速入库',
+                'status'=>'未入库',
+                'remark'=>$WMSReflectReceive->NOTES,
+            ]);
+            $store->save();
 
-        if ($WMSReflectReceive->skus){
-            foreach ($WMSReflectReceive->skus as $sku){
-                $depository=(function()use($sku,$customDepository){
-                    if($customDepository)return $customDepository;
-                    $depository=Depository::where('code',$sku->LOTATT05)->first();
-                    if (!$depository){
+            $customDepository=(function()use($request){
+                $customDepository=Depository::where('code',$request->input('depository_code'))->first();
+                if($request->input('depository_code')){
+                    if (!$customDepository){
                         $depository=new Depository([
-                            'name'=>$sku->LOTATT05,
-                            'code'=>$sku->LOTATT05
+                            'name'=>$request->input('depository_code'),
+                            'code'=>$request->input('depository_code')
                         ]);
                         $depository->save();
                     }
-                    return $depository;
-                })();
-                $storeItem=new StoreItems([
-                    'store_id'=>$store->id,
-                    'asn_line_code'=>$sku->ASNLINENO,
-                    'name'=>$sku->SKUDESCRC,
-                    'sku'=>$sku->SKU,
-                    'barcode'=>$sku->ALTERNATE_SKU1,
-                    'depository_id'=>$depository->id,
-                    'quality'=>$request->input('quality'),
-                    'status'=>'未入库',
-                ]);
-                $storeItem->save();
+                }
+                return $customDepository;
+            })();
+
+            if ($WMSReflectReceive->skus){
+                foreach ($WMSReflectReceive->skus as $sku){
+                    $depository=(function()use($sku,$customDepository){
+                        if($customDepository)return $customDepository;
+                        $depository=Depository::where('code',$sku->LOTATT05)->first();
+                        if (!$depository){
+                            $depository=new Depository([
+                                'name'=>$sku->LOTATT05,
+                                'code'=>$sku->LOTATT05
+                            ]);
+                            $depository->save();
+                        }
+                        return $depository;
+                    })();
+                    $storeItem=new StoreItems([
+                        'store_id'=>$store->id,
+                        'asn_line_code'=>$sku->ASNLINENO,
+                        'name'=>$sku->SKUDESCRC,
+                        'sku'=>$sku->SKU,
+                        'barcode'=>$sku->ALTERNATE_SKU1,
+                        'depository_id'=>$depository->id,
+                        'quality'=>$request->input('quality'),
+                        'status'=>'未入库',
+                    ]);
+                    $storeItem->save();
+                }
             }
         }
         $store=Store::with('storeItems')->where('asn_code',$request->input('asn_code'))->first();
@@ -119,7 +122,7 @@ class StoreController extends Controller
             'quality'=>$request->input('quality'),
             'depository_code'=>$request->input('depository_code'),
             'follow_code'=>$store['id'],
-            ]);
+        ]);
         if ($result){
             $store->status='已入库';
             $store->save();
@@ -131,8 +134,9 @@ class StoreController extends Controller
                     $storeItem->save();
                 });
             }
+            return redirect('store/fast/create')->with('successTip','成功!');
         }
-        return redirect('store/fast/create')->with('successTip','成功!');
+        return redirect('store/fast/create')->with('successError','失败!请检查错误日志');
     }
 
     /**
@@ -182,7 +186,8 @@ class StoreController extends Controller
 
     public function validator(Request $request){
         $validator=Validator::make($request->input(),[
-            'asn_code'=>['required','unique:stores,asn_code'],
+//            'asn_code'=>['required','unique:stores,asn_code'],
+            'asn_code'=>['required'],
             'quality'=>['required'],
             'depository_code'=>['nullable','string'],
         ],[

+ 23 - 19
app/Http/Controllers/TestController.php

@@ -6,37 +6,30 @@ namespace App\Http\Controllers;
 use App\Authority;
 use App\Batch;
 use App\Carrier;
+use App\Commodity;
+use App\CommodityBarcode;
 use App\Events\CancelOrder;
 use App\Events\WeighedEvent;
 use App\Events\WmsReceiveNewEvent;
 use App\Jobs\MeasuringMachineQueue;
-use App\Jobs\ProcessReceiveCombined;
+use App\Jobs\ProcessReceiveCombinedJob;
 use App\Logistic;
 use App\MeasuringMachine;
 use App\Order;
 use App\Package;
-use App\Process;
 use App\ProcessDaily;
-use App\ProcessDailyParticipant;
-use App\ProcessStatistic;
 use App\Rejected;
 use App\RejectedBill;
 use App\RejectedBillItem;
 use App\Role;
-use App\Tutorial;
 use App\User;
-use App\UserDetail;
 use App\UserDutyCheck;
 use App\WMSReflectReceive;
 use Carbon\Carbon;
-use Endroid\QrCode\QrCode;
-use Endroid\QrCode\Response\QrCodeResponse;
 use Illuminate\Database\Eloquent\Builder;
 use Illuminate\Database\Eloquent\Collection;
 use Illuminate\Http\Request;
-use Illuminate\Support\Facades\DB;
 use Illuminate\Support\Facades\Gate;
-use Te7aHoudini\LaravelTrix\Models\TrixAttachment;
 use Zttp\Zttp;
 
 class TestController extends Controller
@@ -51,8 +44,7 @@ class TestController extends Controller
         return call_user_func([$this, $method],$request);
     }
     function t1(Request $request){ //x
-        $url=url(config('api.flux.receive.new'));
-        dd($url,config('api.flux.receive'),config('api.flux'));
+        dd(date('Y-m-d h:i:s',1586481486));
     }
     function tj(Request $request){
         $bills=RejectedBill::where('is_loaded',2)->where('created_at','<',Carbon::now()->subHours(10)->toDateTimeString());
@@ -141,16 +133,28 @@ class TestController extends Controller
         });
     }
 
-    public function test1(Request $request){
-        $a=100/650;
-        DB::table('tests')->insert([
-            'number'=>$a,
-        ]);
-        dd($a);
-        return view('process/checking-in/success',['full_name'=>'lxg','checked_at'=>'2222-02-22 22:22:22']);
+    public function test1(){
+  /*      $a=Package::orderBy('id')->first();
 
+        $date=date("Y-m-d",strtotime("+1 day",strtotime($a->created_at->format('Y-m-d'))));
+        dd($a->created_at->format('Y-m-d'));
 
+        $b=Package::orderBy('id','desc')->first();
+        $sf=$a->created_at->format('Y-m-d');dd((int)$sf);
+        $result=$sf->lte("11:00");
 
+        $c=Carbon::parse("9:10:05");
+        $d=Carbon::parse("18:01:20");
+        $x=($d->diffInSeconds($c))/3600;
+        dd($c,$d,round($x,2)-1);*/
+        $userDutyCheckStart=UserDutyCheck::select('id','checked_at')->where('user_id',1)
+            ->where('checked_at','like','2020-03-13%')->where('type','登入')->orderBy('id')->first();
+        $today=Carbon::now()->format('Y-m-d');
+        $date=date("Y-m-d",strtotime('+'.strval(5)." day",strtotime($today)));
+        $startDate=Carbon::parse("2020-03-31");
+        $diffDay=$startDate->diffInDays($today,true);
 
+        dd($diffDay);
+        $package=Package::orderBy('updated_at','DESC')->get();
     }
 }

+ 1 - 1
app/Http/Controllers/WaybillFinancialSnapshotsController.php

@@ -156,6 +156,6 @@ class WaybillFinancialSnapshotsController extends Controller
             $list[$i]=$w;
         }
         $this->log(__METHOD__,__FUNCTION__,json_encode($waybillFinancialSnapshot),Auth::user()['id']);
-        return Excel::download(new WaybillExport($row,$list), date('Y:m:d ') . '财务报表.xls');
+        return Excel::download(new WaybillExport($row,$list), date('Y:m:d ') . '财务报表.xlsx');
     }
 }

+ 1 - 1
app/Http/Controllers/WaybillsController.php

@@ -630,7 +630,7 @@ class WaybillsController extends Controller
             $list[$i]=$w;
         }
         $this->log(__METHOD__,__FUNCTION__,json_encode($waybill),Auth::user()['id']);
-        return Excel::download(new WaybillExport($row,$list), date('Y:m:d ') . '运单列表.xls');
+        return Excel::download(new WaybillExport($row,$list), date('Y:m:d ') . '运单列表.xlsx');
     }
 
     protected function validatorWaybill(Request $request,$id){

+ 1 - 1
app/Http/Controllers/WeighExceptedController.php

@@ -126,6 +126,6 @@ class WeighExceptedController extends Controller
                $list[$i]=$w;
            }
        }
-       return Excel::download(new WaybillExport($row,$list), date('YmdHis', time()). '称重异常单.xls');
+       return Excel::download(new WaybillExport($row,$list), date('YmdHis', time()). '称重异常单.xlsx');
    }
 }

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

@@ -26,7 +26,6 @@ class ReceiveController extends Controller
      */
     public function new_(Request $request)
     {
-
         ini_set('max_execution_time',2500);
         ini_set('memory_limit','1526M');
         $isNotAHugeList=(function()use(&$request){
@@ -48,20 +47,20 @@ class ReceiveController extends Controller
         foreach ($receiveInputs as $receiveInput){
             $isRepeated=WMSReflectReceive::where('ASNNO',$receiveInput['ASNNO'])->first();
             if($isRepeated){
-                (new Controller())->log(__METHOD__,'error_'.__FUNCTION__,'ASNNO重复'.'|'.json_encode($request));
+                (new Controller())->log(__METHOD__,'error_'.__FUNCTION__,'WMS下发时ASNNO重复'.'|'.json_encode($request));
                 return response()->json(['response'=>['flag'=>'N','code'=>'6666','message'=>'ASNNO重复']])
                     ->setEncodingOptions(JSON_UNESCAPED_UNICODE);
             }
             $receive=new WMSReflectReceive($receiveInput);
             $receive->save();
-//            $skus=[];
             foreach ($receiveInput['SKU_LIST'] as $skuInput){
                 $sku=new WMSReflectReceiveSku($skuInput);
                 $receive->skus()->save($sku);
-//                $skus[]=$sku;
             }
-            if(isset($receive['ASNREFERENCE3']))
+            if(isset($receive['ASNREFERENCE3'])){
+                if(config('jianshang_rejecteds_log_switch'))Controller::logS(__METHOD__,__FUNCTION__,"接收到WMS下发退货单号:{$receive['ASNREFERENCE3']},准备进入事件WmsReceiveNewEvent",null);
                 event(new WmsReceiveNewEvent($receive['ASNREFERENCE3'],$receive));
+            }
         }
         return response()->json(['response'=>['flag'=>'Y','code'=>'0000','message'=>'正确接收']])
             ->setEncodingOptions(JSON_UNESCAPED_UNICODE);
@@ -129,12 +128,13 @@ class ReceiveController extends Controller
      */
     static public function accomplishToWMS(RejectedBill $rejectedBill)
     {
+        if(config('jianshang_rejecteds_log_switch'))Controller::logS(__METHOD__,__FUNCTION__,"进入推送WMS入库接口。退单号:".$rejectedBill['logistic_number_return'],Auth::user()['id']);
         ini_set('max_execution_time',2500);
         $bill=$rejectedBill;
         $wmsReceiveds=WMSReflectReceive::where('ASNREFERENCE3',$rejectedBill['logistic_number_return'])
             ->where('is_uploaded',0)->get();
         if($wmsReceiveds->isEmpty()){
-            (new Controller())->log(__METHOD__,'error_'.__FUNCTION__,'没有WMS入库单');
+            if(config('jianshang_rejecteds_log_switch'))Controller::logS(__METHOD__,'error_'.__FUNCTION__,"错误,WMS入库接口找不到对应富勒映射表未入库记录。退单号:".$rejectedBill['logistic_number_return'],Auth::user()['id']);
             return false;
         }
         $items=$bill->items()->get();
@@ -147,7 +147,11 @@ class ReceiveController extends Controller
         })();
         $success=true;
         $wmsReceiveds->each(function ($wmsReceived)use(&$bill,&$amountsItem,$items,&$success){
-            if(!$bill && $bill['is_loaded']!=0)return;
+            if(config('jianshang_rejecteds_log_switch'))Controller::logS(__METHOD__,__FUNCTION__,"循环WMS映射表(WMS入库接口中)。ASN号:{$wmsReceived['ASNNO']},退单号:".$wmsReceived['ASNREFERENCE3'],Auth::user()['id']);
+            if(!$bill && $bill['is_loaded']!=0){
+                if(config('jianshang_rejecteds_log_switch'))Controller::logS(__METHOD__,'error_'.__FUNCTION__,"跳过!!不上传。(WMS入库接口中)。对应循环WMS映射表本地退单记录已入库。退单号:".$bill['logistic_number_return'],Auth::user()['id']);
+                return;
+            }
 
             $wmsSkus=$wmsReceived->skus()->get();
             $orderNumberCode=$wmsReceived['ASNREFERENCE1']??$bill['order_number'];
@@ -200,22 +204,17 @@ class ReceiveController extends Controller
                             \"USERDEFINE2\": \"\",
                             \"USERDEFINE3\": \"\",
                             \"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\": \"\"
-//                                }
                         "]
                         }
                     ";
                     $skuStrList[]=$skuStr;
                 });
             });
-            if(count($skuStrList)==0)return;
+
+            if(count($skuStrList)==0){
+                if(config('jianshang_rejecteds_log_switch'))Controller::logS(__METHOD__,'error_'.__FUNCTION__,"错误!没有商品项。(WMS入库接口中)。ASN号:{$wmsReceived['ASNNO']},退单号:{$wmsReceived['ASNREFERENCE3']}",Auth::user()['id']);
+                return;
+            }
             $skuStrList = implode(',',$skuStrList);
             $json="
                 {
@@ -233,40 +232,50 @@ class ReceiveController extends Controller
                         }
                     ]
                 }
-        ";
+                ";
+            if(config('jianshang_rejecteds_log_switch'))Controller::logS(__METHOD__,__FUNCTION__,"完成拼接JSON,准备发送给WMS。(WMS入库接口中)。退单号:{$wmsReceived['ASNREFERENCE3']},商品项JSON:{$json}",Auth::user()['id']);
 
             $sendingJson = json_decode($json,true);
             $url=url(config('api.flux.receive.new'));
             $response = Zttp::post($url, $sendingJson);
             $noIssues=true;
             $json = $response->json();
-            (new Controller())->log(__METHOD__,__FUNCTION__,$response->body().'|'.json_encode($sendingJson));
+            if(config('jianshang_rejecteds_log_switch'))Controller::logS(__METHOD__,__FUNCTION__,"得到WMS返回。退单号:{$wmsReceived['ASNREFERENCE3']}},返回:{$response->body()}",Auth::user()['id']);
             if(!$json||!isset($json['Response'])||!$json['Response']['return']['returnFlag']=='1'){
+                if(config('jianshang_rejecteds_log_switch'))Controller::logS(__METHOD__,'error_'.__FUNCTION__,"WMS入库失败,ASN号:{$wmsReceived['ASNNO']}。退单号:{$wmsReceived['ASNREFERENCE3']}},返回:{$response->body()}",Auth::user()['id']);
                 $noIssues=false;
             }
             if($json&&isset($json['Response'])){
                 if($json['Response']['return']['returnFlag']=='2'){
+                    Controller::logS(__METHOD__,'exception_'.__FUNCTION__,"状态2, WMS返回不正常!按成功跳过。退单号:{$wmsReceived['ASNREFERENCE3']}}",Auth::user()['id']);
                     return true;
                 }
                 if(isset($json['Response']['return']['returnDesc'])&&strpos($json['Response']['return']['returnDesc'],'唯一约束')!==false){
-                    (new Controller())->log(__METHOD__,'error_'.__FUNCTION__,$response->body().'|'.json_encode($sendingJson));
+                    Controller::logS(__METHOD__,'exception_'.__FUNCTION__,"违反唯一约束, WMS返回不正常!按成功跳过。退单号:{$wmsReceived['ASNREFERENCE3']}}",Auth::user()['id']);
                     return true;
                 }
                 if(isset($json['Response']['return']['errordescr'])&&strpos($json['Response']['return']['errordescr'],'已完成')!==false){
-                    (new Controller())->log(__METHOD__,'error_'.__FUNCTION__,$response->body().'|'.json_encode($sendingJson));
+                    Controller::logS(__METHOD__,'exception_'.__FUNCTION__,"退单之前已完成, WMS返回不正常!按成功跳过。退单号:{$wmsReceived['ASNREFERENCE3']}}",Auth::user()['id']);
                     return true;
                 }
             }
             if($noIssues&&$json['Response']['return']['returnFlag']=='1'){
                 $wmsReceived['is_uploaded']=1;
                 $wmsReceived->save();
+                Controller::logS(__METHOD__,__FUNCTION__,"成功入库WMS。ASN号:{$wmsReceived['ASNNO']}。退单号:{$wmsReceived['ASNREFERENCE3']}}",Auth::user()['id']);
                 return true;
             }else{
                 $success=false;
-                (new Controller())->log(__METHOD__,'error_'.__FUNCTION__,$response->body().'|'.json_encode($sendingJson));
+                if(config('jianshang_rejecteds_log_switch'))Controller::logS(__METHOD__,'error'.__FUNCTION__,"入库WMS失败!!ASN号:{$wmsReceived['ASNNO']}。退单号:{$wmsReceived['ASNREFERENCE3']}}",Auth::user()['id']);
             }
         });
 
+        if($success){ //bad patch, 正常不需要这两句,作为未知原因的保险
+            $rejectedBill = RejectedBill::find($rejectedBill['id']);
+            $rejectedBill->is_loaded=1;
+            $rejectedBill->save();
+        }
+        if(config('jianshang_rejecteds_log_switch'))Controller::logS(__METHOD__,__FUNCTION__,"入库WMS处理完成,结果为:{$success}。退单号:{$rejectedBill['logistic_number_return']}}",Auth::user()['id']);
 
         return $success;
     }

+ 5 - 15
app/Http/Controllers/api/thirdPart/flux/StoreController.php

@@ -64,15 +64,6 @@ class StoreController extends Controller
                             \"USERDEFINE2\": \"\",
                             \"USERDEFINE3\": \"\",
                             \"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\": \"\"
-//                                }
                     "]
                         }
                     ";
@@ -111,10 +102,10 @@ class StoreController extends Controller
                     (new Controller())->log($METHOD,'error_'.$FUNCTION,$response->body());
                     return true;
                 }
-                if(isset($json['Response']['return']['returnDesc'])&&strpos($json['Response']['return']['returnDesc'],'唯一约束')!==false){
-                    (new Controller())->log($METHOD,'error_'.$FUNCTION,$response->body());
-                    return true;
-                }
+//                if(isset($json['Response']['return']['returnDesc'])&&strpos($json['Response']['return']['returnDesc'],'唯一约束')!==false){
+//                    (new Controller())->log($METHOD,'error_'.$FUNCTION,$response->body());
+//                    return true;
+//                }
                 if(isset($json['Response']['return']['errordescr'])&&strpos($json['Response']['return']['errordescr'],'已完成')!==false){
                     (new Controller())->log($METHOD,'error_'.$FUNCTION,$response->body());
                     return true;
@@ -123,7 +114,7 @@ class StoreController extends Controller
             if($noIssues&&$json['Response']['return']['returnFlag']=='1'){
                 $wmsReceived['is_uploaded']=1;
                 $wmsReceived->save();
-                (new Controller())->log($METHOD, 'success_' . $FUNCTION, $response->body() );
+                (new Controller())->log($METHOD, 'success_' . $FUNCTION, $response->body());
                 return true;
             }else {
                 $success = false;
@@ -131,7 +122,6 @@ class StoreController extends Controller
             }
         });
 
-
         return $success;
     }
 

+ 2 - 1
app/Http/Controllers/api/thirdPart/jianshang/RejectedController.php

@@ -112,6 +112,7 @@ class RejectedController extends Controller
     }
 
     function sendRejected2(Rejected $rejected){
+        $this->log(__METHOD__,__FUNCTION__,'informed: '.json_encode($rejected),Auth::user()['id']);
         $created_at = $rejected['created_at'] ?? '';
         $fee_collected = $rejected['fee_collected'] ?? '';
         $goodses=[];
@@ -160,7 +161,7 @@ class RejectedController extends Controller
             $this->log(__METHOD__,__FUNCTION__.'_noPush_'.$rejected['logistic_number_return'],json_encode($json),Auth::user()['id']);
             return 'none';
         }
-        $this->log(__METHOD__,__FUNCTION__.'_'.$rejected['logistic_number_return'],json_encode($json),Auth::user()['id']);
+        $this->log(__METHOD__,__FUNCTION__.'_'.$rejected['logistic_number_return'],'response: '.json_encode($json),Auth::user()['id']);
 //        $this->markItemsIsLoaded($json);
         return 'storable';
     }

+ 7 - 3
app/Imports/CommodityImport.php

@@ -3,6 +3,7 @@
 namespace App\Imports;
 
 use App\Commodity;
+use Illuminate\Database\Eloquent\Builder;
 use Illuminate\Support\Collection;
 use Maatwebsite\Excel\Concerns\ToCollection;
 use Maatwebsite\Excel\Concerns\WithHeadingRow;
@@ -30,7 +31,9 @@ class CommodityImport implements ToCollection, WithHeadingRow
             $name = $row['商品名称'] ?? $row['name'] ?? $row['NAME'] ?? $row['Name'] ?? '';
             $sku = $row['商品编码'] ?? $row['sku'] ?? $row['SKU'] ?? $row['Sku'] ?? '';
             $owner = $row['货主'] ?? $row['owner'] ?? $row['owner_name'] ?? $row['OWNER'] ?? $row['Owner'] ?? '';
-            $commodity=Commodity::where('barcode',$barcode)->first();
+            $commodity=Commodity::whereHas('barcodes', function (Builder $query)use($barcode){
+                $query->where('code',$barcode);
+            })->first();
             if($commodity){
                 if($this->isOverride){
                     $name?$commodity['name']= $name:false;
@@ -39,12 +42,13 @@ class CommodityImport implements ToCollection, WithHeadingRow
                     $commodity->update();
                 }
             }else{
-                Commodity::create([
+                $commodity=new Commodity([
                     'name' => $name,
                     'sku' => $sku,
                     'owner_name' => $owner,
-                    'barcode' => $barcode,
                 ]);
+                $commodity->save();
+                $commodity->newBarcode($barcode);
             }
         }
     }

+ 4 - 4
app/Jobs/ProcessReceiveCombined.php → app/Jobs/ProcessReceiveCombinedJob.php

@@ -13,7 +13,7 @@ use Illuminate\Queue\InteractsWithQueue;
 use Illuminate\Contracts\Queue\ShouldQueue;
 use Illuminate\Foundation\Bus\Dispatchable;
 
-class ProcessReceiveCombined implements ShouldQueue
+class ProcessReceiveCombinedJob implements ShouldQueue
 {
     use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
 
@@ -30,8 +30,8 @@ class ProcessReceiveCombined implements ShouldQueue
      */
     public function handle()
     {
-        $receives=WMSReflectReceive::where('ASNREFERENCE3',$this->logisticNumberReturn)->get();
-        (new Controller())->log(__METHOD__,__FUNCTION__,$this->logisticNumberReturn.'|'.json_encode($receives));
-        event(new WmsReceiveNewEvent($this->logisticNumberReturn,$receives->first()));
+        $wmsReceives=WMSReflectReceive::where('ASNREFERENCE3',$this->logisticNumberReturn)->get();
+        if(config('jianshang_rejecteds_log_switch'))Controller::logS(__METHOD__,__FUNCTION__,"执行队列任务,处理退单号:{$this->logisticNumberReturn}",null);
+        event(new WmsReceiveNewEvent($this->logisticNumberReturn,$wmsReceives->first()));
     }
 }

+ 9 - 5
app/Listeners/InformWMSReceivedListener.php

@@ -9,6 +9,7 @@ use App\RejectedBill;
 use App\RejectedBillItem;
 use Illuminate\Queue\InteractsWithQueue;
 use Illuminate\Contracts\Queue\ShouldQueue;
+use Illuminate\Support\Facades\Auth;
 
 class InformWMSReceivedListener
 {
@@ -25,26 +26,29 @@ class InformWMSReceivedListener
     /**
      * Handle the event.
      *
-     * @param InformWMSReceivedEvent $event
-     * @return bool
+     * @param InformWMSReceivedEvent $event`
+     * @return bool`
      */
     public function handle(InformWMSReceivedEvent $event)
     {
         $rejectedBill=$event->rejectedBill;
+        if(config('jianshang_rejecteds_log_switch'))Controller::logS(__METHOD__,__FUNCTION__,'推送WMS入库事件进入,退单号:'.$rejectedBill['logistic_number_return'],Auth::user()['id']);
         $hasAccomplishedToWMS=ReceiveController::accomplishToWMS($rejectedBill);
         if(!$hasAccomplishedToWMS){
-            (new Controller())->log(__METHOD__, 'error_' . __FUNCTION__, $rejectedBill->toJson());
+            if(config('jianshang_rejecteds_log_switch'))Controller::logS(__METHOD__,'error_'.__FUNCTION__,'推送WMS入库失败!!退单号:'.$rejectedBill['logistic_number_return'],Auth::user()['id']);
             return false;
         }
         $rejectedBill = RejectedBill::find($rejectedBill['id']);
         $rejectedBill->is_loaded=1;
         $rejectedBill->save();
-//        $rejectedBill = RejectedBill::find($rejectedBill['id']);
-//        $rejectedBill->update();
+        $rejectedBill['is_loaded']=1; //奇怪,出现过要重保存才成功的情况,未知原因的保险
+        $rejectedBill->update();
+        if(config('jianshang_rejecteds_log_switch'))Controller::logS(__METHOD__,__FUNCTION__,"推送WMS后退单改为已入库, 真实状态:{$rejectedBill['is_loaded']},退单号:".$rejectedBill['logistic_number_return'],Auth::user()['id']);
         $rejectedBill->items->each(function(RejectedBillItem $item){
             $item['is_loaded']='已入库';
             $item->save();
         });
+        if(config('jianshang_rejecteds_log_switch'))Controller::logS(__METHOD__,__FUNCTION__,"推送WMS后商品标记完为入库状态。退单号:".$rejectedBill['logistic_number_return'],Auth::user()['id']);
         return true;
     }
 }

+ 20 - 14
app/Listeners/WmsReceiveNewListener.php

@@ -6,7 +6,7 @@ use App\Events\InformWMSReceivedEvent;
 use App\Events\WmsReceiveNewEvent;
 use App\Http\Controllers\Controller;
 use App\Http\Controllers\RejectedBillItemController;
-use App\Jobs\ProcessReceiveCombined;
+use App\Jobs\ProcessReceiveCombinedJob;
 use App\Owner;
 use App\RejectedBill;
 use App\RejectedBillItem;
@@ -16,6 +16,7 @@ use Carbon\Carbon;
 use Illuminate\Queue\InteractsWithQueue;
 use Illuminate\Contracts\Queue\ShouldQueue;
 use Illuminate\Support\Collection;
+use Illuminate\Support\Facades\Auth;
 
 class WmsReceiveNewListener
 {
@@ -37,10 +38,11 @@ class WmsReceiveNewListener
      */
     public function handle(WmsReceiveNewEvent $event)
     {
+        if(config('jianshang_rejecteds_log_switch'))Controller::logS(__METHOD__,__FUNCTION__,"进入退单处理事件,由下发或队列启动,退单号:{$event->logisticNumberReturn}",null);
         $logisticNumberReturn=$event->logisticNumberReturn;
-        $receives=WMSReflectReceive::where('ASNREFERENCE3',$logisticNumberReturn)->where('is_uploaded',0)->orderBy('id','desc')->get();
+        $wmsReceives=WMSReflectReceive::where('ASNREFERENCE3',$logisticNumberReturn)->where('is_uploaded',0)->orderBy('id','desc')->get();
         $downloadedSkuItems=[];
-        $receives->each(function (WMSReflectReceive $receive)use(&$downloadedSkuItems){
+        $wmsReceives->each(function (WMSReflectReceive $receive)use(&$downloadedSkuItems){
             $receive->skus()->each(function(WMSReflectReceiveSku $item)use(&$downloadedSkuItems){
                 $downloadedSkuItems[]=$item;
             });
@@ -48,16 +50,17 @@ class WmsReceiveNewListener
         $wmsReceive=$event->wmsReceive;
         switch ($wmsReceive['CUSTOMERID']){
             case 'JIANSHANG':
-                $this->handleJianshang($logisticNumberReturn,$downloadedSkuItems,$receives);
+                $this->handleJianshang($logisticNumberReturn,$downloadedSkuItems,$wmsReceives);
                 break;
         }
     }
 
     private function handleJianshang($logisticNumberReturn, $downloadedSkuItems, $wmsReceives){
+        if(config('jianshang_rejecteds_log_switch'))Controller::logS(__METHOD__,__FUNCTION__,"进入笕尚退单处理事件,退单号:{$logisticNumberReturn}",null);
         $bills=RejectedBill::where('logistic_number_return',$logisticNumberReturn)->
         whereIn('is_loaded',[0,2])->get();
         if($bills->isEmpty()){//没有本地货单
-            (new Controller())->log(__METHOD__,  __FUNCTION__,  'WMS下发,且没有本地退单:'.$logisticNumberReturn);
+            Controller::logS(__METHOD__,'error_'.__FUNCTION__,"退单事件错误,没有本地对应退单,退单号:{$logisticNumberReturn}",null);
             return;
         }
 
@@ -73,36 +76,39 @@ class WmsReceiveNewListener
             return new Collection($items);
         })();
         $isItemsReceivedOverDownloaded=WMSReflectReceiveSku::isItemsOverDownloadedSkus($actualGotItems,$downloadedSkuItems);
-
+        if(config('jianshang_rejecteds_log_switch'))Controller::logS(__METHOD__,__FUNCTION__,"退单事件中,同名退单数:("
+            .$bills->count().")},同名退单:(".json_encode($bills).")},实收件:(".json_encode($actualGotItems).")},下载件:("
+            .json_encode($downloadedSkuItems).")},退单号:{$logisticNumberReturn}",null);
 
         if(!$isItemsReceivedOverDownloaded){//实收小于等于下发(下发大于等于实收),入库
+            if(config('jianshang_rejecteds_log_switch'))Controller::logS(__METHOD__,__FUNCTION__,"退单事件中,入库触发(实收小于等于下发),退单号:{$logisticNumberReturn}",null);
             foreach ($bills as $bill){
                 if($bill['is_loaded']!==1){
                     event(new InformWMSReceivedEvent($bill));
                 }
             }
-            (new Controller())->log(__METHOD__,  __FUNCTION__,  '实收小于等于下发(下发大于等于实收),入库:'.$logisticNumberReturn);
+            if(config('jianshang_rejecteds_log_switch'))Controller::logS(__METHOD__,__FUNCTION__,"退单事件中,入库完成并结束事件,退单号:{$logisticNumberReturn}",null);
             return;
         }
 
 
-
+        if(config('jianshang_rejecteds_log_switch'))Controller::logS(__METHOD__,__FUNCTION__,"实收大于下发(不入库),退单号:{$logisticNumberReturn}",null);
         //(下发小于实收)
         //该单号在6小时前录入的(不是当前最新录入),直接不入库,将实收推给客户(笕尚),并且退单号下所有WMS本地单作废
         $lastReceive=$wmsReceives->first();
         if($lastReceive&&$lastReceive['created_at'])
             if(Carbon::now()->greaterThan(Carbon::make($lastReceive['created_at'])->addHours(6))){
-                (new RejectedBillItemController())->sendRejectedToThirdPart($actualGotItems,$bills->first());
-                (new Controller())->log(__METHOD__,  __FUNCTION__,  '下发小于实收,发给客户:'.$logisticNumberReturn);
+                if(config('jianshang_rejecteds_log_switch'))Controller::logS(__METHOD__,__FUNCTION__,"退单事件中,6小时内WMS下发的该退单,将不入库的单推给笕尚,准备进入推送接口,退单号:{$logisticNumberReturn}",null);
+                (new RejectedBillItemController())->sendRejectedToThirdPart2($actualGotItems,$bills->first());  //!!!
+                if(config('jianshang_rejecteds_log_switch'))Controller::logS(__METHOD__,__FUNCTION__,"退单事件中,完成推单给笕尚,准备进入推送接口,退单号:{$logisticNumberReturn}",null);
                 return;
             }
 
-
-
         //不入库,推入任务,13小时后重新执行本事件
         if($wmsReceives->isNotEmpty()){
-            (new Controller())->log(__METHOD__,  __FUNCTION__,  '推入任务,13小时后执行本事件:'.$logisticNumberReturn);
-            ProcessReceiveCombined::dispatch($logisticNumberReturn)->delay(now()->addHours(13));
+            Controller::logS(__METHOD__,  __FUNCTION__,  '推入任务,13小时后执行本事件,退单号:'.$logisticNumberReturn);
+            ProcessReceiveCombinedJob::dispatch($logisticNumberReturn)->delay(now()->addHours(13));
         }
+        Controller::logS(__METHOD__,'error_'.__FUNCTION__,"退单事件已走完,但下载的WMS退单不存在! 退单号:{$logisticNumberReturn}",null);
     }
 }

+ 1 - 0
app/Package.php

@@ -14,6 +14,7 @@ class Package extends Model
         'owner_name',
         'logistic_name',
         'measuringMachine_name',
+        'measuring_machine_name',
         'measuringMachine_status',
         'paperBox_name',
         'WMSReflectPackage_name'

+ 9 - 5
app/RejectedBillItem.php

@@ -2,6 +2,7 @@
 
 namespace App;
 
+use Illuminate\Database\Eloquent\Builder;
 use Illuminate\Database\Eloquent\Collection;
 use Illuminate\Database\Eloquent\Model;
 use Illuminate\Database\Eloquent\SoftDeletes;
@@ -33,22 +34,25 @@ class RejectedBillItem extends Model
         if(!$this['name_goods'])return;
         $barcode=$this['barcode_goods'];
         $name=$this['name_goods'];
-        $commodity=Commodity::where('barcode', $barcode)->first();
+        $commodity=Commodity::whereHas('barcodes', function (Builder $query)use($barcode){
+            $query->where('code',$barcode);
+        })->first();
+        $owner=Owner::where('name',$this->rejectedBill->owner->name)->first();
         if($commodity){
             if($commodity['name']!=$name){
                 $commodity['name']=$name;
             }
-            if(!$commodity['owner_name']){
-                $commodity['owner_name']=$this->rejectedBill->owner->name;
+            if(!$commodity['owner_id']){
+                $commodity['owner_id']=$owner?$owner['id']:null;
             }
             $commodity->update();
         }
         else{
             $commodity = new Commodity();
-            $commodity['barcode']=$barcode;
             $commodity['name']=$name;
-            $commodity['owner_name']=$this->rejectedBill->owner->name;
+            $commodity['owner_id']=$owner?$owner['id']:null;
             $commodity->save();
+            $commodity->newBarcode($barcode);
         }
     }
     public function getQualityLabelAttribute(){

+ 13 - 5
app/User.php

@@ -54,16 +54,24 @@ class User extends Authenticatable
         }
         return false;
     }
-    public function token(){
+
+    /**
+     * @param null $expireTime 手动设置过期时间则覆盖其中默认时间,分钟为单位
+     * @return mixed|string
+     */
+    public function token($expireTime=null){
+        if(!$expireTime){
+            $expireTime=config('users.token_expire_minutes');
+        }
         $token=Cache::get('tokenUser_'.$this['id']);
         if($token){
-            Cache::put('tokenUser_'.$this['id'],$token,config('users.token_expire_seconds'));
-            Cache::put('tokenStr_'.$token,$this['id'],config('users.token_expire_seconds'));
+            Cache::put('tokenUser_'.$this['id'],$token,$expireTime);
+            Cache::put('tokenStr_'.$token,$this['id'],$expireTime);
             return $token;
         }
         $token=md5(rand(1,intval(microtime(true)*10000)).'baoshi');
-        Cache::put('tokenUser_'.$this['id'],$token,config('users.token_expire_seconds'));
-        Cache::put('tokenStr_'.$token,$this['id'],config('users.token_expire_seconds'));
+        Cache::put('tokenUser_'.$this['id'],$token,$expireTime);
+        Cache::put('tokenStr_'.$token,$this['id'],$expireTime);
         return $token;
     }
     public function touchToken(){

+ 1 - 0
config/api.php

@@ -4,6 +4,7 @@ return [
 
     'api_faking' => env('API_FAKING', false),
     'api_switch_receive_to_wms' => env('API_SWITCH_RECEIVE_TO_WMS', true),
+    'jianshang_rejecteds_log_switch' => true,
 
     'url_rejected_send_jianshang' => 'http://daye.mjstyle.cn:8083/mjstyle-bs-service/order/receive',
     'url_rejected_send_jianshang2' => 'http://daye.mjstyle.cn:8083/mjstyle-bs-service/order/receive2',

+ 1 - 1
config/database.php

@@ -56,7 +56,7 @@ return [
             'collation' => 'utf8mb4_unicode_ci',
             'prefix' => '',
             'prefix_indexes' => true,
-            'strict' => true,
+            'strict' => false,
             'engine' => null,
             'options' => extension_loaded('pdo_mysql') ? array_filter([
                 PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),

+ 2 - 1
config/users.php

@@ -4,5 +4,6 @@ return [
 
 
     'superAdmin' => ['ldaaww','baoshi56','zhouyaping','shiyao','zhouzhendong'],
-    'token_expire_seconds'=>7200
+    'token_expire_minutes'=>7200,
+    'token_check_in_expire_minutes'=>7200, //打卡过期时间,单位为分钟
 ];

+ 12 - 0
database/factories/CommodityBarcodeFactory.php

@@ -0,0 +1,12 @@
+<?php
+
+/** @var \Illuminate\Database\Eloquent\Factory $factory */
+
+use App\CommodityBarcode;
+use Faker\Generator as Faker;
+
+$factory->define(CommodityBarcode::class, function (Faker $faker) {
+    return [
+        //
+    ];
+});

+ 1 - 0
database/migrations/2019_08_20_134833_create_logs_table.php

@@ -22,6 +22,7 @@ class CreateLogsTable extends Migration
             $table->longText('description')->nullable();
             $table->bigInteger('id_user')->index()->nullable();
             $table->timestamps();
+            $table->timestamp('created_at')->index()->nullable()->change();
         });
     }
 

+ 3 - 3
database/migrations/2019_11_27_181556_create_commodities_table.php

@@ -16,9 +16,9 @@ class CreateCommoditiesTable extends Migration
         Schema::create('commodities', function (Blueprint $table) {
             $table->bigIncrements('id');
             $table->string('barcode')->unique();
-            $table->string('name')->nullable();
-            $table->string('sku')->nullable();
-            $table->string('owner_name')->nullable();
+            $table->string('name')->nullable()->index();
+            $table->string('sku')->nullable()->index();
+            $table->string('owner_name')->nullable()->index();
             $table->timestamps();
         });
     }

+ 7 - 2
database/migrations/2020_03_25_164834_change_commodities_table.php

@@ -16,6 +16,9 @@ class ChangeCommoditiesTable extends Migration
      */
     public function up()
     {
+
+        ini_set('max_execution_time',2500);
+        ini_set('memory_limit','1526M');
         Schema::table('commodities',function (Blueprint $table){
             $table->bigInteger('owner_id')->after('owner_name')->nullable()->comment('外键货主');
         });
@@ -23,8 +26,10 @@ class ChangeCommoditiesTable extends Migration
             $commodities=Commodity::get();
             foreach ($commodities as $commodity){
                 $owner=\App\Owner::select('id')->where('name',$commodity->owner_name)->first();
-                $commodity->owner_id=$owner->id;
-                $commodity->save();
+                if($owner){
+                    $commodity->owner_id=$owner->id;
+                    $commodity->save();
+                }
             }
             Schema::table('commodities',function (Blueprint $table){
                 $table->dropColumn('owner_name');

+ 1 - 1
database/migrations/2020_03_25_182324_add_process_authority.php

@@ -14,7 +14,7 @@ class AddProcessAuthority extends Migration
         '二次加工管理-录入',
         '二次加工管理-编辑',
         '二次加工管理-删除',
-        '二次加工管理-门卫审核',
+        '二次加工管理-打卡审核',
         '二次加工管理-接单与驳回',
         '二次加工管理-登记工时',
         '二次加工管理-登记工时-审核',

+ 33 - 0
database/migrations/2020_03_30_103931_create_commodity_barcodes_table.php

@@ -0,0 +1,33 @@
+<?php
+
+use Illuminate\Support\Facades\Schema;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Database\Migrations\Migration;
+
+class CreateCommodityBarcodesTable extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::create('commodity_barcodes', function (Blueprint $table) {
+            $table->bigIncrements('id');
+            $table->string('code')->index();
+            $table->string('commodity_id')->index();
+            $table->timestamp();
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::dropIfExists('commodity_barcodes');
+    }
+}

+ 35 - 0
database/migrations/2020_03_30_112202_drop_commodity_barcode_column_to_barcode_table.php

@@ -0,0 +1,35 @@
+<?php
+
+use App\CommodityBarcode;
+use Illuminate\Support\Facades\DB;
+use Illuminate\Support\Facades\Schema;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Database\Migrations\Migration;
+
+class DropCommodityBarcodeColumnToBarcodeTable extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        DB::insert('INSERT commodity_barcodes (code,commodity_id) SELECT barcode, id FROM commodities');
+        $this->delRepeated();
+        Schema::table('commodities', function (Blueprint $table) {
+            $table->dropColumn('barcode');
+        });
+    }
+
+    private function delRepeated(){
+        $codes=CommodityBarcode::groupBy('code','commodity_id')->havingRaw('count(*) > ?', [1])->get();
+        $codes->each(function(CommodityBarcode $code){
+            $delCodes=CommodityBarcode::where('code',$code['code'])->where('commodity_id',$code['commodity_id'])->where('id','!=',$code['id'])->get();
+            $delCodes->each(function(CommodityBarcode $delcode){
+                $delcode->delete();
+            });
+        });
+    }
+
+}

+ 1 - 2
public/t.php

@@ -1,5 +1,4 @@
 <?php
 
 
-
-var_dump(intval(microtime(true)*10000));
+echo date('Y-m-d h:i:s', 1585274333);

+ 3 - 0
resources/views/store/fast/create.blade.php

@@ -10,6 +10,9 @@
         <div class="card col-md-8 offset-md-2">
             <div class="card-body">
                 <form method="POST" action="{{ url('store/fast') }}">
+                    @if(Session::has('successTip'))
+                        <div class="alert alert-success h1">{{Session::get('successTip')}}</div>
+                    @endif
                     @if(Session::has('successError'))
                         <div class="alert alert-danger h1">{{Session::get('successError')}}</div>
                     @endif

+ 1 - 1
resources/views/weight/package/index.blade.php

@@ -157,7 +157,7 @@
                         {id:'{{$package->id}}',ownerName:'{{$package->owner_name}}',logisticNumber:'{{$package->logistic_number}}'
                         ,wmsNumber:'{{$package->delivery_number}}',batchNumber:'{{$package->batch_number}}',batchRule:'{{$package->batch_rule}}'
                         ,recipient:'{{$package->recipient}}',recipientMobile:'{{$package->recipient_mobile}}',logisticName:'{{$package->logistic_name}}'
-                        ,measuringMachineName:'{{$package->measuringMachine_name}}',
+                        ,measuringMachineName:'{{$package->measuring_machine_name}}',
                         weight:'{{$package->weight}}', length:'{{$package->length}}',width:'{{$package->width}}',height:'{{$package->height}}',
                         bulk:'{{$package->bulk}}',paperBoxName:'{{$package->paperBox_name}}',
                         status:'{{$package->status}}',created_at:'{{$package->created_at}}',weighed_at:'{{$package->weighed_at}}'},

+ 20 - 21
resources/views/weight/package/statistics.blade.php

@@ -73,8 +73,8 @@
                                             <td>
                                                 <div class="form-inline">
                                                     <div class="form-group">
-                                                        <input  style="width: 170px;transform:scale(0.8)" type="date" v-model="filterData.date_start" class="form-control">
-                                                        <input id="hour_input" type="text" class="form-control"  placeholder="00:00"
+                                                        <input  style="width: 170px;transform:scale(0.8)" type="date" v-model="filterData.date_start" class="form-control" @change="makeFilterDuration">
+                                                        <input id="hour_input" type="text" class="form-control"  placeholder="00:00" @change="makeFilterDuration" autocomplete="off"
                                                                @input="hourFilter($event)" v-model="inputtingAdd_start" style="transform:scale(0.8);width: 80px"
                                                                @keypress="hourFilter($event)" >
                                                         <input v-if="filterData.date_start" hidden  name="date_start" :value="filterData.date_start+' '+inputtingAdd_start">
@@ -82,8 +82,8 @@
                                                 </div>
                                                 <div class="form-inline">
                                                     <div class="form-group">
-                                                        <input style="transform:scale(0.8);width: 170px"  type="date" v-model="filterData.date_end" class="form-control" >
-                                                        <input id="hour_input" type="text" class="form-control"  placeholder="00:00"
+                                                        <input style="transform:scale(0.8);width: 170px"  type="date" v-model="filterData.date_end" class="form-control" @change="makeFilterDuration">
+                                                        <input id="hour_input" type="text" class="form-control"  placeholder="00:00" @change="makeFilterDuration" autocomplete="off"
                                                                @input="hourFilter($event)" v-model="inputtingAdd_end" style="transform:scale(0.8);width:80px"
                                                                @keypress="hourFilter($event)" >
                                                         <input v-if="filterData.date_end" hidden  name="date_end" :value="filterData.date_end+' '+inputtingAdd_end">
@@ -98,13 +98,9 @@
                                         </tr>
                                     </table>
                                     <span class="text-muted"
-                                          style="position: absolute; bottom: 10px;left:calc(50% - 165px);transform: scale(0.65)" v-if="filterData.date_start || filterData.date_end">
-                                        时间区间:@{{ dateTime }}</span>
+                                          style="position: absolute;  bottom: 48px;left:30px;transform: scale(0.65)" v-if="filterData.date_start || filterData.date_end">
+                                        @{{ dateTime }}</span>
 
-                                    <div class=" align-items-center d-flex pt-2">
-                                        <div class="m-auto d-flex">
-                                        </div>
-                                    </div>
                                 </td>
                                 <td>
 
@@ -263,19 +259,22 @@
                 this.initInputs();
                 $(".tooltipTarget").tooltip({'trigger':'hover'});
                 $('#statistics').removeClass('d-none');
-                let date=new Date();
-                let thisDate=this.getDate(date);
-                let startTime=this.inputtingAdd_start;
-                let endTime=this.inputtingAdd_end;
-                let endDate=this.filterData.date_end;
-                let startDate=this.filterData.date_start;
-                if (this.filterData.date_start && !this.inputtingAdd_start)  startTime="00:00";
-                if (this.filterData.date_end && !this.inputtingAdd_end)  endTime="23:59";
-                if (this.filterData.date_start && !this.filterData.date_end) endDate=thisDate;
-                if (this.filterData.date_end && !this.filterData.date_start) startDate="2020-01-01 00:00";
-                this.dateTime=startDate+" "+startTime+" - "+endDate+" "+endTime;
+                this.makeFilterDuration();
             },
             methods: {
+                makeFilterDuration(){
+                    let date=new Date();
+                    let thisDate=this.getDate(date);
+                    let startTime=this.inputtingAdd_start;
+                    let endTime=this.inputtingAdd_end;
+                    let endDate=this.filterData.date_end;
+                    let startDate=this.filterData.date_start;
+                    if (this.filterData.date_start && !this.inputtingAdd_start)  startTime="00:00";
+                    if (this.filterData.date_end && !this.inputtingAdd_end)  endTime="23:59";
+                    if (this.filterData.date_start && !this.filterData.date_end) endDate=thisDate;
+                    if (this.filterData.date_end && !this.filterData.date_start) startDate="2000-01-01 00:00";
+                    this.dateTime="选择区间:"+startDate+" "+startTime+" 至 "+endDate+" "+endTime;
+                },
                 getDate(date){
                     let da=[
                         date.getFullYear(),

+ 2 - 0
routes/web.php

@@ -20,6 +20,8 @@ Route::any('test/{method}', 'TestController@method'); //测试
 Auth::routes();
 Route::get('/home', 'HomeController@index')->name('home');
 
+Route::get('password/change', 'Auth\PasswordController@change');
+Route::post('password/update', 'Auth\PasswordController@update');
 Route::get('maintenance/commodity/import', 'CommodityController@import');
 Route::post('maintenance/commodity/import/excel', 'CommodityController@importExcel');