Prechádzať zdrojové kódy

出库管理-发运,批量注释

Zhouzhendong 5 rokov pred
rodič
commit
accdaf3364

+ 29 - 2
app/Exports/Export.php

@@ -4,20 +4,31 @@ use Maatwebsite\Excel\Concerns\FromCollection;
 use Maatwebsite\Excel\Concerns\ShouldAutoSize;
 use Maatwebsite\Excel\Concerns\WithColumnFormatting;
 use Maatwebsite\Excel\Concerns\WithCustomValueBinder;
+use Maatwebsite\Excel\Concerns\WithEvents;
 use Maatwebsite\Excel\Concerns\WithStrictNullComparison;
+use Maatwebsite\Excel\Events\AfterSheet;
 use PhpOffice\PhpSpreadsheet\Cell\StringValueBinder;
 use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
 
 class Export extends StringValueBinder implements FromCollection,
-    ShouldAutoSize,WithColumnFormatting,WithCustomValueBinder,WithStrictNullComparison
+    ShouldAutoSize,WithColumnFormatting,WithCustomValueBinder,WithStrictNullComparison,WithEvents
 {
     private $row;
     private $data;
+    private $mergeCell;
+    private $columnName;
 
-    public function __construct($row,$data)
+    /*
+     * $mergeCell $columnName :合并单元格所需参数;
+     * $mergeCell 需要合并的位置数组以MAP形式存储 [开始行=>结束行]
+     * $columnName 需要合并列 与合并行数结合使用ARRAY存储 ['A','B']
+     */
+    public function __construct($row,$data,$mergeCell=null,$columnName=null)
     {
         $this->row = $row;
         $this->data = $data;
+        $this->mergeCell = $mergeCell;
+        $this->columnName = $columnName;
     }
 
     public function collection()
@@ -41,6 +52,22 @@ class Export extends StringValueBinder implements FromCollection,
         }
         return collect($row);
     }
+    public function registerEvents(): array
+    {
+        // TODO: Implement registerEvents() method.
+        if ($this->mergeCell && $this->columnName){
+            return [
+                AfterSheet::class => function(AfterSheet $event){
+                    foreach ($this->columnName as $column){
+                        foreach ($this->mergeCell as $key=>$value){
+                            $event->sheet->getDelegate()->mergeCells($column.$key.':'.$column.$value);
+                        }
+                    }
+                }
+            ];
+        }
+    }
+
     public function columnFormats(): array{
         return [
             'D' => NumberFormat::FORMAT_TEXT,

+ 167 - 1
app/Http/Controllers/ExitController.php

@@ -2,9 +2,175 @@
 
 namespace App\Http\Controllers;
 
+use App\Exports\Export;
+use App\OracleBasCustomer;
+use App\OracleDOCOrderHeader;
 use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Gate;
+use Maatwebsite\Excel\Facades\Excel;
 
 class ExitController extends Controller
 {
-    //
+    public function conditionQuery(Request $request,$orders){
+        $ordertime_start=$request->input('ordertime_start');
+        $ordertime_end=$request->input('ordertime_end');
+        $customerid=$request->input('customerid');
+        $soreference1=$request->input('soreference1');
+        $soreference5=$request->input('soreference5');
+        if ($ordertime_start){
+            $ordertime_start=$ordertime_start." 00:00:00";
+            $orders=$orders->where('ordertime','>=',$ordertime_start);
+        }
+        if ($ordertime_end){
+            $ordertime_end=$ordertime_end." 23:59:59";
+            $orders=$orders->where('ordertime','<=',$ordertime_end);
+        }
+        if ($customerid)$orders=$orders->where('customerid',$customerid);
+        if ($soreference1)$orders=$orders->where('soreference1','like',$soreference1."%");
+        if ($soreference5){
+            $arr=array_filter(preg_split('/[,, ]+/is', $soreference5));
+            $orders=$orders->whereIn('soreference5',$arr);
+        }
+        return $orders;
+    }
+    public function forwarding(Request $request){
+        if(!Gate::allows('出库管理-发运')){ return redirect(url('/'));  }
+        $orders=OracleDOCOrderHeader::with(['oracleDOCOrderDetails'=>function($query){
+            return $query->select('DOC_Order_Details.orderno','DOC_Order_Details.CustomerID',
+                'DOC_Order_Details.SKU','DOC_Order_Details.QtyOrdered','DOC_Order_Details.OrderLineNo',
+                'BAS_SKU.Alternate_SKU1','BAS_SKU.Descr_C')
+                ->leftJoin('BAS_SKU',function ($join){
+                    $join->on('DOC_Order_Details.CustomerID','=','BAS_SKU.CustomerID')
+                    ->on('DOC_Order_Details.SKU','=','BAS_SKU.SKU');
+                })->orderBy('OrderLineNo');
+        }])->select('OrderNo','SOStatus','WAREHOUSEID','CustomerID'
+            ,'ConsigneeID','ConsigneeName','C_Tel1','CarrierName','IssuePartyName','WaveNo','SOReference1'
+            ,'soreference5','EDISENDFLAG2','EDISendTime2','Notes','ERPCANCELFLAG','Picking_Print_Flag','EDISENDFLAG'
+            ,'ReleaseStatus','C_Address1','OrderTime');
+        if ($request->input('checkData')){
+            $checkData=explode(',',$request->input('checkData'));
+            $orders=$orders->whereIn('orderno',$checkData)->get();
+            return $this->export($orders);
+        }
+        if ($request->input('export')){
+            $orders=$this->conditionQuery($request,$orders);
+            return $this->export($orders->get());
+        }
+        if ($request->input())$orders=$this->conditionQuery($request,$orders);
+        $orders=$orders->paginate($request->input('paginate')??50);
+        $customers=OracleBasCustomer::select('customerid','descr_c')->get();
+        $request=$request->input();
+        return view('exit/index/forwarding',compact('orders','customers','request'));
+    }
+
+    public function batchComments(Request $request){
+        if(!Gate::allows('出库管理-批量注释')){ return redirect(url('/'));  }
+        $checkData=$request->input('checkData');
+        $content=$request->input('content');
+        $ordersNotNull=OracleDOCOrderHeader::select('OrderNo','Notes')->whereIn('orderno',$checkData)
+            ->whereNotNull('notes')->get();
+        OracleDOCOrderHeader::select('OrderNo','Notes')->whereIn('orderno',$checkData)
+            ->whereNull('notes')->update(['notes'=>$content]);
+        $ordersNotNullArr=array_column($ordersNotNull->toArray(),'orderno');
+        $ordersNullArr=array_diff($checkData,$ordersNotNullArr);
+        $data=[];
+        foreach ($ordersNotNull as $order){
+            OracleDOCOrderHeader::where('orderno',$order->orderno)->update(["notes"=>($order->notes).",".$content]);
+            $order->notes=($order->notes).",".$content;
+            array_push($data,$order);
+        }
+        foreach ($ordersNullArr as $order){
+            array_push($data,["orderno"=>$order,'notes'=>$content]);
+        }
+        return $data;
+    }
+
+    function export($orders){
+        if(!Gate::allows('出库管理')){ return redirect(url('/'));  }
+        ini_set('max_execution_time',3500);
+        ini_set('memory_limit','3526M');
+        $row=[[
+            'orderno'=>'编号',
+            'sostatus'=>'订单状态',
+            'warehouseid'=>'仓库',
+            'oracleBASCustomer_descr_c'=>'客户',
+            'consigneeid'=>'收货人',
+            'consigneename'=>'收货人名称',
+            'c_tel1'=>'收货人电话',
+            'carriername'=>'承运人',
+            'issuepartyname'=>'下单方名称',
+            'waveno'=>'波次编号',
+            'soreference1'=>'客户订单号',
+            'soreference5'=>'快递单号',
+            'edisendflag2'=>'快递获取标记',
+            'edisendtime2'=>'快递获取时间',
+            'sku'=>'产品代码',
+            'alternate_sku1'=>'产品条码',
+            'descr_c'=>'产品名称',
+            'qtyordered'=>'订单数量',
+            'notes'=>'备注',
+            'erpcancelflag'=>'接口取消标记',
+            'picking_print_flag'=>'拣货单打印标记',
+            'edisendflag'=>'接口回传标记',
+            'releasestatus'=>'订单冻结标记',
+            'c_address1'=>'收货人地址',
+        ]];
+        $list=[];
+        $sign=[];
+        $mergeCell=[];
+        foreach ($orders as $order){
+            $data=[
+                'orderno'=>$order->orderno,
+                'sostatus'=>$order->sostatus,
+                'warehouseid'=>$order->warehouseid,
+                'oracleBASCustomer_descr_c'=>$order->oracleBASCustomer_descr_c,
+                'consigneeid'=>$order->consigneeid,
+                'consigneename'=>$order->consigneename,
+                'c_tel1'=>$order->c_tel1,
+                'carriername'=>$order->carriername,
+                'issuepartyname'=>$order->issuepartyname,
+                'waveno'=>$order->waveno,
+                'soreference1'=>$order->soreference1,
+                'soreference5'=>$order->soreference5,
+                'edisendflag2'=>$order->edisendflag2,
+                'edisendtime2'=>$order->edisendtime2,
+                'notes'=>$order->notes,
+                'erpcancelflag'=>$order->erpcancelflag,
+                'picking_print_flag'=>$order->picking_print_flag,
+                'edisendflag'=>$order->edisendflag,
+                'releasestatus'=>$order->releasestatus,
+                'c_address1'=>$order->c_address1,
+            ];
+            if (count($order->oracleDOCOrderDetails)<1){
+                $data['sku']='';
+                $data['alternate_sku1']='';
+                $data['descr_c']='';
+                $data['qtyordered']='';
+                array_push($list,$data);
+                continue;
+            }
+            foreach ($order->oracleDOCOrderDetails as $oracleDOCOrderDetail){
+                $data['sku']=$oracleDOCOrderDetail->sku;
+                $data['alternate_sku1']=$oracleDOCOrderDetail->alternate_sku1;
+                $data['descr_c']=$oracleDOCOrderDetail->descr_c;
+                $data['qtyordered']=$oracleDOCOrderDetail->qtyordered;
+                if (isset($sign[$order->orderno])){
+                    $data['orderno']='';$data['sostatus']='';$data['warehouseid']='';$data['oracleBASCustomer_descr_c']='';$data['consigneeid']='';$data['consigneename']='';
+                    $data['c_tel1']='';$data['carriername']='';$data['issuepartyname']='';$data['waveno']='';$data['soreference1']='';$data['soreference5']='';
+                    $data['edisendflag2']='';$data['edisendtime2']='';$data['notes']='';$data['erpcancelflag']='';$data['picking_print_flag']='';$data['edisendflag']='';
+                    $data['releasestatus']='';$data['c_address1']='';
+                    array_push($list,$data);
+                    continue;
+                }
+                array_push($list,$data);
+                $sign[$order->orderno]=count($list)+1;
+            }
+            if (count($order->oracleDOCOrderDetails)>1){
+                $mergeCell[$sign[$order->orderno]]=$sign[$order->orderno]+(count($order->oracleDOCOrderDetails)-1);
+            }
+        }
+        $columnName=["A","B","C","D","E","F","G","H","I","J","K","L","M","N","S","T","U","V","W","X"];
+        return Excel::download(new Export($row,$list,$mergeCell,$columnName),date('YmdHis', time()).'-出库发运单.xlsx');
+    }
+
 }

+ 5 - 98
app/Http/Controllers/TestController.php

@@ -5,12 +5,14 @@ namespace App\Http\Controllers;
 
 use App\Authority;
 use App\Batch;
+use App\City;
 use App\Events\CancelOrder;
 use App\Events\WmsReceiveNewEvent;
 use App\Http\Controllers\Api\thirdPart\flux\WaybillController;
 use App\Logistic;
 use App\OracleActTransactionLog;
 use App\Order;
+use App\Owner;
 use App\Package;
 use App\Rejected;
 use App\RejectedBill;
@@ -138,6 +140,9 @@ class TestController extends Controller
             $authority->delete();
         });
     }
+    public function test1(){
+        Owner::update([["id"=>18,"code"=>"test1"],["id"=>17,"code"=>"test2"]]);
+    }
     public function test3()
     {
         $strs=["auibh","aopk","bikon"];
@@ -194,102 +199,4 @@ class TestController extends Controller
         // 先进后出“([{”入栈,")]}"出栈,轮询到出栈元素去映射栈顶,符合出栈,不符合直接返回
         //依次轮询 如果映射正确那么最后栈为空栈 否则返回false
     }
-    function test5(Request $request){
-        $page=$request->input('page')??1;
-        $date_start=$request->input('date_start');
-        $date_end=$request->input('date_end');
-        $sql='select * from (select result.*,rownum rn from (';
-        $sql.=' select customer.Descr_C 货主, 库位, sku.SKU 产品编码, sku.ALTERNATE_SKU1 产品条码, ';
-        $sql.=' sku.Descr_C 商品名称, lot.LotAtt05 属性仓, lot.LotAtt08 质量状态, lot.LotAtt02 失效日期, ';
-        $sql.=' lot.LotAtt04 批号 ';
-        $sql.=' , sum(移出数量)移出数量, sum(移入数量)移入数量 ';
-        $sql.=' , storeStatus.QTY 在库数量, storeStatus.QtyAllocated 占用数量,count(1) over () as sum from ';
-        $sql.=' (select FMLotNum,FMSKU,TOCustomerID,0 as 移出数量, sum(TOQty_Each) as 移入数量, TOLocation as 库位 ';
-        $sql.=" from ACT_Transaction_Log where TransactionType='PA' ";
-        if ($date_start) $sql.=" and addtime > '".$date_start." 00:00:00' ";
-        if ($date_end) $sql.=" and addtime < '".$date_end." 23:59:59' ";
-        if (!$date_start && !$date_end)$sql .= " and addtime >'".date('Y-m-d H:i:s',strtotime("-1 day"))."' ";
-        $sql.=' group by TOCustomerID, TOLocation, TOCustomerID,FMSKU,FMLotNum union all ';
-        $sql.=' select FMLotNum,FMSKU,TOCustomerID,sum(FMQty_Each) as 移出数量, 0 as 移入数量, FMLOCATION as 库位 ';
-        $sql.=" from ACT_Transaction_Log where TransactionType='SO' ";
-        if ($date_start) $sql.=" and addtime > '".$date_start." 00:00:00' ";
-        if ($date_end) $sql.=" and addtime < '".$date_end." 23:59:59' ";
-        if (!$date_start && !$date_end)$sql .= " and addtime >'".date('Y-m-d H:i:s',strtotime("-1 day"))."' ";
-        $sql.=' group by FMCustomerID, FMLocation, TOCustomerID,FMSKU,FMLotNum union all ';
-        $sql.=' select FMLotNum,FMSKU,TOCustomerID,sum(FMQty_Each) as 移出数量,0 as 移入数量, FMLocation as 库位 ';
-        $sql.=" from ACT_Transaction_Log  where TransactionType='MV' ";
-        if ($date_start) $sql.=" and addtime > '".$date_start." 00:00:00' ";
-        if ($date_end) $sql.=" and addtime < '".$date_end." 23:59:59' ";
-        if (!$date_start && !$date_end)$sql .= " and addtime >'".date('Y-m-d H:i:s',strtotime("-1 day"))."' ";
-        $sql.=' group by FMLocation,TOCustomerID,FMSKU,FMLotNum union all ';
-        $sql.=' select FMLotNum,FMSKU,TOCustomerID,0 as 移出数量,sum(TOQty_Each)as 移入数量, TOLocation as 库位 ';
-        $sql.=" from ACT_Transaction_Log where TransactionType='MV' ";
-        if ($date_start) $sql.=" and addtime > '".$date_start." 00:00:00' ";
-        if ($date_end) $sql.=" and addtime < '".$date_end." 23:59:59' ";
-        if (!$date_start && !$date_end)$sql .= " and addtime >'".date('Y-m-d H:i:s',strtotime("-1 day"))."' ";
-        $sql.=' group by TOLocation,TOCustomerID,FMSKU,FMLotNum)stockLog ';
-        $sql.=' left join BAS_Customer customer on customer.CustomerID=stockLog.TOCUSTOMERID ';
-        $sql.=' left join BAS_SKU sku on sku.SKU=stockLog.FMSKU ';
-        $sql.=' left join INV_LOT_ATT lot on lot.LOTNUM=stockLog.FMLOTNUM ';
-        $sql.=' left join INV_LOT_LOC_ID storeStatus on storeStatus.LOTNUM=stockLog.FMLOTNUM ';;
-        $sql.=' and storeStatus.LocationID=stockLog.库位 where ROWNUM<=50 ';
-        $sql.=' group by 库位,customer.Descr_C,sku.SKU,sku.ALTERNATE_SKU1 ';
-        $sql.=' ,sku.Descr_C,FMLotNum,lot.LotAtt05,lot.LotAtt08,lot.LotAtt02,lot.LotAtt04 ';
-        $sql.=' , storeStatus.QTY, storeStatus.QtyAllocated ';
-        $sql.=' )result)  where rn>0';
-        $oracleActTransactingLogs1=DB::connection('oracle')->select($sql);
-        unset($sql);
-        $sql='select * from (select result.*,rownum rn from (';
-        $sql.=' select customer.Descr_C 货主, 库位, sku.SKU 产品编码, sku.ALTERNATE_SKU1 产品条码, ';
-        $sql.=' sku.Descr_C 商品名称, lot.LotAtt05 属性仓, lot.LotAtt08 质量状态, lot.LotAtt02 失效日期, ';
-        $sql.=' lot.LotAtt04 批号 ';
-        $sql.=' , sum(移出数量)移出数量, sum(移入数量)移入数量 ';
-        $sql.=' , storeStatus.QTY 在库数量, storeStatus.QtyAllocated 占用数量,count(1) over () as sum from ';
-        $sql.=' (select FMLotNum,FMSKU,TOCustomerID,0 as 移出数量, sum(TOQty_Each) as 移入数量, TOLocation as 库位 ';
-        $sql.=" from ACT_Transaction_Log where TransactionType='PA' ";
-        if ($date_start) $sql.=" and addtime > '".$date_start." 00:00:00' ";
-        if ($date_end) $sql.=" and addtime < '".$date_end." 23:59:59' ";
-        if (!$date_start && !$date_end)$sql .= " and addtime >'".date('Y-m-d H:i:s',strtotime("-1 day"))."' ";
-        $sql.=' group by TOCustomerID, TOLocation, TOCustomerID,FMSKU,FMLotNum union all ';
-        $sql.=' select FMLotNum,FMSKU,TOCustomerID,sum(FMQty_Each) as 移出数量, 0 as 移入数量, FMLOCATION as 库位 ';
-        $sql.=" from ACT_Transaction_Log where TransactionType='SO' ";
-        if ($date_start) $sql.=" and addtime > '".$date_start." 00:00:00' ";
-        if ($date_end) $sql.=" and addtime < '".$date_end." 23:59:59' ";
-        if (!$date_start && !$date_end)$sql .= " and addtime >'".date('Y-m-d H:i:s',strtotime("-1 day"))."' ";
-        $sql.=' group by FMCustomerID, FMLocation, TOCustomerID,FMSKU,FMLotNum union all ';
-        $sql.=' select FMLotNum,FMSKU,TOCustomerID,sum(FMQty_Each) as 移出数量,0 as 移入数量, FMLocation as 库位 ';
-        $sql.=" from ACT_Transaction_Log  where TransactionType='MV' ";
-        if ($date_start) $sql.=" and addtime > '".$date_start." 00:00:00' ";
-        if ($date_end) $sql.=" and addtime < '".$date_end." 23:59:59' ";
-        if (!$date_start && !$date_end)$sql .= " and addtime >'".date('Y-m-d H:i:s',strtotime("-1 day"))."' ";
-        $sql.=' group by FMLocation,TOCustomerID,FMSKU,FMLotNum union all ';
-        $sql.=' select FMLotNum,FMSKU,TOCustomerID,0 as 移出数量,sum(TOQty_Each)as 移入数量, TOLocation as 库位 ';
-        $sql.=" from ACT_Transaction_Log where TransactionType='MV' ";
-        if ($date_start) $sql.=" and addtime > '".$date_start." 00:00:00' ";
-        if ($date_end) $sql.=" and addtime < '".$date_end." 23:59:59' ";
-        if (!$date_start && !$date_end)$sql .= " and addtime >'".date('Y-m-d H:i:s',strtotime("-1 day"))."' ";
-        $sql.=' group by TOLocation,TOCustomerID,FMSKU,FMLotNum)stockLog ';
-        $sql.=' left join BAS_Customer customer on customer.CustomerID=stockLog.TOCUSTOMERID ';
-        $sql.=' left join BAS_SKU sku on sku.SKU=stockLog.FMSKU ';
-        $sql.=' left join INV_LOT_ATT lot on lot.LOTNUM=stockLog.FMLOTNUM ';
-        $sql.=' left join INV_LOT_LOC_ID storeStatus on storeStatus.LOTNUM=stockLog.FMLOTNUM ';;
-        $sql.=' and storeStatus.LocationID=stockLog.库位 where ROWNUM<=500 ';
-        $sql.=' group by 库位,customer.Descr_C,sku.SKU,sku.ALTERNATE_SKU1 ';
-        $sql.=' ,sku.Descr_C,FMLotNum,lot.LotAtt05,lot.LotAtt08,lot.LotAtt02,lot.LotAtt04 ';
-        $sql.=' , storeStatus.QTY, storeStatus.QtyAllocated ';
-        $sql.=' )result)  where rn>50';
-        $oracleActTransactingLogs2=DB::connection('oracle')->select($sql);
-        $oracleActTransactingLogs1=json_encode($oracleActTransactingLogs1);
-        $oracleActTransactingLogs2=json_encode($oracleActTransactingLogs2);
-        $oracleActTransactingLogs1=json_decode($oracleActTransactingLogs1,true);
-        $oracleActTransactingLogs2=json_decode($oracleActTransactingLogs2,true);
-        foreach ($oracleActTransactingLogs1 as $oracleActTransactingLog1){
-            foreach ($oracleActTransactingLogs2 as $oracleActTransactingLog2){
-                if ($oracleActTransactingLog1['产品编码']==$oracleActTransactingLog2['产品编码']){
-                    /*if ($oracleActTransactingLog1['产品编码']=='6206100971005')*/var_dump(['oracleActTransactingLog1'=>$oracleActTransactingLog1,'oracleActTransactingLog2'=>$oracleActTransactingLog2]);
-
-                }
-            }
-        }
-    }
 }

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

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

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

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

+ 0 - 2
app/OracleDOCOrderDetail.php

@@ -3,11 +3,9 @@
 namespace App;
 
 use Illuminate\Database\Eloquent\Model;
-use App\Traits\ModelTimeFormat;
 
 class OracleDOCOrderDetail extends Model
 {
-    use ModelTimeFormat;
     protected $connection="oracle";
     protected $table="DOC_Order_Details";
 }

+ 38 - 0
app/OracleDOCOrderHeader.php

@@ -0,0 +1,38 @@
+<?php
+
+namespace App;
+
+use Illuminate\Database\Eloquent\Model;
+
+class OracleDOCOrderHeader extends Model
+{
+    protected $connection="oracle";
+    protected $table="DOC_Order_Header";
+    protected $primaryKey="ORDERNO";
+    public $timestamps=false;
+    protected $appends=[
+        'oracleBASCustomer_descr_c'
+    ];
+    protected $fillable=[
+        'NOTES',
+    ];
+
+    /*
+     * column: OrderNo=>编号,SOStatus=>订单状态,WAREHOUSEID=>仓库,CustomerID=>客户,
+     *         ConsigneeID=>收货人,ConsigneeName=>收货人名称,C_Tel1=>收货人电话,CarrierName=>承运人,
+     *         IssuePartyName=>下单方名称,WaveNo=>波次编号,SOReference1=>客户订单号,soreference5=>快递单号,EDISENDFLAG2=>快递获取标记,
+     *         EDISendTime2=>快递获取时间,Notes=>备注,ERPCANCELFLAG=>接口取消标记,
+     *         Picking_Print_Flag=>拣货单打印标记,EDISENDFLAG=>接口回传标记,ReleaseStatus=>订单冻结标记,C_Address1=>收货人地址,
+     * */
+
+    public function oracleDOCOrderDetails(){
+        return $this->hasMany('App\OracleDOCOrderDetail','orderno','orderno');
+    }
+    public function oracleBASCustomer(){
+        return $this->hasOne('App\OracleBasCustomer','customerid','customerid');
+    }
+
+    public function getOracleBASCustomerDescrCAttribute(){
+        return $this['oracleBASCustomer']? $this['oracleBASCustomer']['descr_c']:null;
+    }
+}

+ 38 - 0
database/migrations/2020_06_04_162259_add_exit_authority.php

@@ -0,0 +1,38 @@
+<?php
+
+use App\Authority;
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class AddExitAuthority extends Migration
+{
+    protected $authNames=[
+        "出库管理",
+        "出库管理-发运",
+        "出库管理-批量注释",
+    ];
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        foreach ($this->authNames as $name){
+            if(!Authority::where('name',$name)->first())(new Authority(['name'=>$name,'alias_name'=>$name]))->save();
+        }
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        foreach ($this->authNames as $name){
+            Authority::where('name',$name)->delete();
+        }
+    }
+}

+ 281 - 289
resources/views/exit/index/forwarding.blade.php

@@ -2,322 +2,314 @@
 
 @section('content')
     @component('exit.index.menu')@endcomponent
-    <div id="list" class="d-none container-fluid">
-        <form method="GET" action="{{url('waybill/forwarding')}}" id="form">
-            <div class="text-nowrap mb-0" style="background: #fff;">
-                <div v-if="isBeingFilterConditions">
-                    <div><div class="col" style="padding:0">
-                            <a  href="{{url('waybill/forwarding')}}"><span class="btn btn-warning text-dark">清除过滤条件</span></a>
-                        </div>
-                    </div>
-                </div>
-                <div class="row mt-2 ml-2">
-                    <div class="col-md-6" style="max-width: 400px">
-                        <input type="date" name="created_at_start" class=" form-control-sm tooltipTarget" title="选择显示指定日期的起始时间"
-                               v-model="filterData.created_at_start" :class="filterData.created_at_start?'bg-warning':''">
-                        <input type="date" class=" form-control-sm tooltipTarget" name="created_at_end" title="选择显示指定日期的结束时间"
-                               v-model="filterData.created_at_end" :class="filterData.created_at_end?'bg-warning':''" >
-                    </div>
-                    <div class=" col-md-2 mr-0 " style="max-width: 160px">
-                        <input type="text" title="运单号:支持15内模糊搜索与15天外精确搜索" name="waybill_number" placeholder="运单号"
-                               class=" form-control-sm tooltipTarget" v-model="filterData.waybill_number" style="vertical-align: middle;width: 153px" :class="filterData.waybill_number?'bg-warning':''">
-                    </div>
-                    <div class=" col-md-2 " style="max-width: 160px">
-                        <input type="text" title="承运商单号:支持15内模糊搜索与15天外精确搜索"  name="carrier_bill" placeholder="承运商单号"
-                               class="form-control-sm tooltipTarget" v-model="filterData.carrier_bill" style="vertical-align: middle;width: 153px" :class="filterData.carrier_bill?'bg-warning':''">
-                    </div>
-                    <input type="submit" hidden>
-                </div>
-                <div class="ml-4 mt-2">
-                    <span class="dropdown">
-                        <button type="button" class="btn  btn-sm  form-control-sm dropdown-toggle tooltipTarget" :class="[checkData.length>0?'btn-dark text-light':'btn-outline-dark']"
-                                data-toggle="dropdown" title="导出所有页将会以搜索条件得到的过滤结果,将其全部记录(每一页)导出">
-                            导出Excel
-                        </button>
-                        <div class="dropdown-menu">
-                            <a class="dropdown-item" @click="waybillExport(1)" href="javascript:">导出勾选内容</a>
-                            <a class="dropdown-item" @click="waybillExport(2)" href="javascript:">导出所有页</a>
-                        </div>
-                    </span>
-                </div>
-            </div>
-        </form>
-        <div class="card">
-            <table class="card-body table table-sm table-hover table-striped table-bordered d-none d-sm-block p-0 text-nowrap" style="width: 100%">
-                <tr style="width: 100%">
-                    <th class="td-operation">
-                        <label for="all">
-                            <input id="all" type="checkbox" @click="checkAll($event)">全选
-                        </label>
-                    </th>
-                    <th>序号</th>
-                    <th class="color1">日期</th>
-                    <th class="color1">承运商</th>
-                    <th class="color1">宝时运单号</th>
-                    <th class="color1">提货仓</th>
-                    <th class="color1">货主</th>
-                    <th class="color1">预估重量/KG</th>
-                    <th class="color1">预估体积/M³</th>
-                    <th class="color2">状态</th>
-                    <th class="color2">专线运单号</th>
-                    <th class="color2">查件电话</th>
-                    <th class="color2">件数</th>
-                    <th class="color2">重量</th>
-                    <th class="color2">体积</th>
-                    <th>操作</th>
+    <div id="list" class="d-none">
+        <form method="GET" action="{{url('exit/index/forwarding')}}" id="form">
+            <table class="table  table-sm table-bordered text-nowrap  mb-0 ml-3">
+                <tr v-if="isBeingFilterConditions">
+                    <td colspan="10">
+                        <div class="col" style="padding:0">
+                            <a  href="{{url('exit/index/forwarding')}}"><span class="btn btn-warning text-dark">清除过滤条件</span></a>
+                        </div></td>
                 </tr>
-                <tr v-for="(waybill,i) in waybills">
-                    <td>
-                        <input class="checkItem" type="checkbox" :value="waybill.id" v-model="checkData">
-                    </td>
-                    <td>@{{ i+1 }}</td>
-                    <td>@{{ waybill.created_at }}</td>
-                    <td>@{{ waybill.carrier_name }}</td>
-                    <td>@{{ waybill.waybill_number }}</td>
-                    <td>@{{ waybill.origination }}</td>
-                    <td>@{{ waybill.owner_name }}</td>
-                    <td>@{{ waybill.warehouse_weight_other }}</td>
-                    <td>@{{ waybill.warehouse_weight }}</td>
-                    <td><span v-if="waybill.status=='已完结'">已完成</span><span v-else><span v-if="waybill.carrier_bill">已提交</span><span v-if="!waybill.carrier_bill">待提交</span></span></td>
-                    <td>
-                        <span v-if="waybill.isBtn || !waybill.carrier_bill">
-                            <input :id="'carrier_bill'+waybill.id+'PC'" :class="errors['_'+waybill.id]&&errors['_'+waybill.id].carrier_bill?'is-invalid tooltipTargetError':''"
-                                   :title="errors['_'+waybill.id]&&errors['_'+waybill.id].carrier_bill?errors['_'+waybill.id].carrier_bill[0]:''" type="text" class="form-control form-control-sm w-100" :value="waybill.carrier_bill">
-                        </span><span v-else>@{{ waybill.carrier_bill }}</span>
-                    </td>
-                    <td>
-                        <span v-if="waybill.isBtn || !waybill.carrier_bill">
-                            <input :id="'inquire_tel'+waybill.id+'PC'" :class="errors['_'+waybill.id]&&errors['_'+waybill.id].inquire_tel?'is-invalid tooltipTargetError':''"
-                                   :title="errors['_'+waybill.id]&&errors['_'+waybill.id].inquire_tel?errors['_'+waybill.id].inquire_tel[0]:''" type="text" class="form-control form-control-sm w-100" :value="waybill.inquire_tel">
-                        </span><span v-else>@{{ waybill.inquire_tel }}</span>
+                <tr>
+                    <td style="width: 400px">
+                        <select  name="paginate" v-model="filterData.paginate" class="tooltipTarget form-control-sm" style="vertical-align: middle" @change="submit">
+                            <option value="50">每页显示50行</option>
+                            <option value="100">每页显示100行</option>
+                            <option value="200">每页显示200行</option>
+                            <option value="500">每页显示500行</option>
+                            <option value="1000">每页显示1000行</option>
+                        </select></td>
+                    <td style="width: 400px">
+                        <input  type="date" name="ordertime_start" class=" form-control-sm tooltipTarget" title="选择显示指定日期的起始时间"
+                               v-model="filterData.ordertime_start" :class="filterData.ordertime_start?'bg-warning':''">
                     </td>
-                    <td>
-                        <span v-if="waybill.isBtn || !waybill.carrier_bill">
-                            <input :id="'amount'+waybill.id+'PC'" :class="errors['_'+waybill.id]&&errors['_'+waybill.id].amount?'is-invalid tooltipTargetError':''"
-                                   :title="errors['_'+waybill.id]&&errors['_'+waybill.id].amount?errors['_'+waybill.id].amount[0]:''" type="text" class="form-control form-control-sm w-100" :value="waybill.amount">
-                        </span><span v-else>@{{ waybill.amount }}</span>
+                    <td style="width: 400px">
+                        <input  type="date" class=" form-control-sm tooltipTarget" name="ordertime_end" title="选择显示指定日期的结束时间"
+                               v-model="filterData.ordertime_end" :class="filterData.ordertime_end?'bg-warning':''" >
                     </td>
-                    <td>
-                        <span v-if="waybill.isBtn || !waybill.carrier_bill">
-                            <input :id="'carrier_weight_other'+waybill.id+'PC'" :class="errors['_'+waybill.id]&&errors['_'+waybill.id].carrier_weight_other?'is-invalid tooltipTargetError':''"
-                                   :title="errors['_'+waybill.id]&&errors['_'+waybill.id].carrier_weight_other?errors['_'+waybill.id].carrier_weight_other[0]:''" type="text" class="form-control form-control-sm w-100" :value="waybill.carrier_weight_other">
-                        </span><span v-else>@{{ waybill.carrier_weight_other }}</span>
+                    <td colspan="7"></td>
+                </tr>
+                <tr>
+                    <td >
+                        <input type="text" class="form-control-sm tooltipTarget" placeholder="客户"
+                               style="width:70px" @input="owner_seek"
+                               title="输入关键词快速定位下拉列表,回车确定">
+                        <select name="customerid" v-model="filterData.customerid" @change="submit" style="max-width: 120px" class="form-control-sm tooltipTarget"  title="选择要显示的客户" :class="filterData.customerid?'bg-warning':''">
+                            <option >    </option>
+                            <option v-for="owner in owners" :value="owner.customerid" >@{{owner.descr_c}}</option>
+                        </select>
                     </td>
                     <td>
-                        <span v-if="waybill.isBtn || !waybill.carrier_bill">
-                            <input :id="'carrier_weight'+waybill.id+'PC'" :class="errors['_'+waybill.id]&&errors['_'+waybill.id].carrier_weight?'is-invalid tooltipTargetError':''"
-                                   :title="errors['_'+waybill.id]&&errors['_'+waybill.id].carrier_weight?errors['_'+waybill.id].carrier_weight[0]:''" type="text" class="form-control form-control-sm w-100" :value="waybill.carrier_weight">
-                        </span><span v-else>@{{ waybill.carrier_weight }}</span>
+                        <input name="soreference1" v-model="filterData.soreference1" class="form-control-sm tooltipTarget" placeholder="发运单号" :class="filterData.soreference1?'bg-warning':''">
                     </td>
-                    <td>
-                        <span v-if="waybill.status!='已完结'">
-                            <button v-if="!waybill.isBtn&&waybill.carrier_bill" @click="waybill.isBtn=true" class="btn btn-sm btn-outline-dark" >修改</button>
-                            <button v-if="!waybill.isBtn&& !waybill.carrier_bill" @click="submit(waybill.id+'PC',waybill.id);" class="btn btn-sm btn-outline-info" >录入</button>
-                            <button v-if="waybill.isBtn" @click="submit(waybill.id+'PC',waybill.id);" class="btn btn-sm btn-outline-success">确定</button>
-                            <button @click="waybill.isBtn=false" v-if="waybill.isBtn" class="btn btn-sm btn-outline-danger">取消</button>
-                        </span>
+                    <td >
+                        <input name="soreference5" title="可输出多快递单号" v-model="filterData.soreference5" class="form-control-sm tooltipTarget" placeholder="快递单号" :class="filterData.soreference5?'bg-warning':''">
                     </td>
+                    <td colspan="7"><input hidden type="submit"></td>
                 </tr>
-            </table>
-            <table class="table table-striped table-sm table-bordered table-hover p-0 d-block d-sm-none" style="background: rgb(255, 255, 255);">
-                <tbody>
-                <tr v-for="waybill in waybills">
-                    <td style="filter:grayscale(30%); ">
-                        <div :style="waybill.status!='已完结'?'background-color:#f6eee8':''" class="mt-3">
-                            <div style="transform:scale(0.9)" class="pl-0">
-                                <span class="mr-3 text-nowrap"><span style="color:#783000">日期:</span><span style="color:#af7651">@{{ waybill.created_at }}</span></span>
-                                <span class="mr-3 text-nowrap"><span style="color:#783000">承运商:</span><span style="color:#af7651">@{{ waybill.carrier_name }}</span></span>
-                                <span class="mr-3 text-nowrap"><span style="color:#783000">宝时运单号:</span><span style="color:#af7651">@{{ waybill.waybill_number }}</span></span>
-                                <span class="mr-3 text-nowrap"><span style="color:#783000">提货仓:</span><span style="color:#af7651">@{{ waybill.origination }}</span></span>
-                                <span class="mr-3 text-nowrap"><span style="color:#783000">项目:</span><span style="color:#af7651">@{{ waybill.owner_name }}</span></span>
-                                <span class="mr-3 text-nowrap"><span style="color:#783000">预估重量:</span><span style="color:#af7651" v-if="waybill.warehouse_weight_other">@{{ waybill.warehouse_weight_other }} @{{ waybill.warehouse_weight_unit_other_name }}</span></span>
-                                <span class="mr-3 text-nowrap"><span style="color:#783000">预估体积:</span><span style="color:#af7651" v-if="waybill.warehouse_weight">@{{ waybill.warehouse_weight }} @{{ waybill.warehouse_weight_unit_name }}</span></span>
-                            </div>
-                        </div>
-                        <div :style="waybill.status!='已完结'?'background-color:#e8eef6':''"  class="mb-3">
-                            <div style="transform:scale(0.9)" class="pl-0 form-inline">
-                                <span class="mr-3 text-nowrap form-inline"><span style="color:#02346a">专线运单号:</span>
-                                    <input :id="'carrier_bill'+waybill.id" :class="errors['_'+waybill.id]&&errors['_'+waybill.id].carrier_bill?'is-invalid tooltipTargetError':''"
-                                           :title="errors['_'+waybill.id]&&errors['_'+waybill.id].carrier_bill?errors['_'+waybill.id].carrier_bill[0]:''" v-if="waybill.isBtn || !waybill.carrier_bill" type="text" :value="waybill.carrier_bill"
-                                           class="form-control form-control-sm " @click="enlarge($event)"  style="width: 50px">
-                                    <span v-else  class="text-muted">@{{ waybill.carrier_bill }}</span>
-                                </span>
-                                <span class="mr-3 text-nowrap form-inline"><span style="color:#02346a">查&nbsp;件&nbsp;电&nbsp;话:</span>
-                                    <input :id="'inquire_tel'+waybill.id" :class="errors['_'+waybill.id]&&errors['_'+waybill.id].inquire_tel?'is-invalid tooltipTargetError':''"
-                                           :title="errors['_'+waybill.id]&&errors['_'+waybill.id].inquire_tel?errors['_'+waybill.id].inquire_tel[0]:''" v-if="waybill.isBtn || !waybill.carrier_bill" type="text" :value="waybill.inquire_tel"
-                                           class="form-control form-control-sm" @click="enlarge($event)"  style="width:50px">
-                                    <span v-else  class="text-muted">@{{ waybill.inquire_tel }}</span>
-                                </span>
-                                <span class="mr-3 text-nowrap form-inline"><span style="color:#02346a">件数:</span>
-                                    <input :id="'amount'+waybill.id" :class="errors['_'+waybill.id]&&errors['_'+waybill.id].amount?'is-invalid tooltipTargetError':''"
-                                           :title="errors['_'+waybill.id]&&errors['_'+waybill.id].amount?errors['_'+waybill.id].amount[0]:''" v-if="waybill.isBtn || !waybill.carrier_bill" type="text" :value="waybill.amount" class="form-control form-control-sm"
-                                           @click="enlarge($event)" style="width:50px">
-                                    <span v-else class="text-muted">@{{ waybill.amount }}</span>
-                                </span>
-                                <span class="mr-3 text-nowrap form-inline"><span style="color:#02346a">重量:</span>
-                                    <input :id="'carrier_weight_other'+waybill.id" :class="errors['_'+waybill.id]&&errors['_'+waybill.id].carrier_weight_other?'is-invalid tooltipTargetError':''"
-                                           :title="errors['_'+waybill.id]&&errors['_'+waybill.id].carrier_weight_other?errors['_'+waybill.id].carrier_weight_other[0]:''" v-if="waybill.isBtn || !waybill.carrier_bill" type="text" :value="waybill.carrier_weight_other"
-                                           class="form-control form-control-sm" @click="enlarge($event)" style="width:50px">
-                                    <span v-else class="text-muted">@{{ waybill.carrier_weight_other }}</span>
-                                </span>
-                                <span class="mr-3 text-nowrap form-inline"><span style="color:#02346a">体积:</span>
-                                    <input :id="'carrier_weight'+waybill.id" :class="errors['_'+waybill.id]&&errors['_'+waybill.id].carrier_weight?'is-invalid tooltipTargetError':''"
-                                           :title="errors['_'+waybill.id]&&errors['_'+waybill.id].carrier_weight?errors['_'+waybill.id].carrier_weight[0]:''" v-if="waybill.isBtn || !waybill.carrier_bill" type="text" :value="waybill.carrier_weight"
-                                           class="form-control form-control-sm" @click="enlarge($event)" {{--@mouseleave="shrink($event)"--}} style="width:50px">
-                                    <span v-else class="text-muted">@{{ waybill.carrier_weight }}</span>
-                                </span>
-                                <span class="mr-3 text-nowrap" v-if="waybill.status!='已完结'">
-                                    <button v-if="waybill.isBtn==true || !waybill.carrier_bill" class="btn btn-sm btn-outline-success" @click="submit(waybill.id)">提交</button>
-                                    <button v-if="waybill.isBtn==true" class="btn btn-sm btn-outline-danger" @click="waybill.isBtn=false">取消</button>
-                                    <button v-if="waybill.isBtn==false && waybill.carrier_bill" class="btn btn-sm " @click="waybill.isBtn=true" :class="waybill.carrier_bill?'btn-outline-dark':'btn-outline-primary'">修改</button></span></div>
-                        </div>
+                <tr>
+                    <td colspan="10">
+                       <span class="dropdown">
+                                <button type="button" class="btn btn-outline-dark btn-sm form-control-sm dropdown-toggle tooltipTarget" :class="[checkData.length>0?'btn-dark text-light':'']"
+                                        data-toggle="dropdown" title="导出所有页将会以搜索条件得到的过滤结果,将其全部记录(每一页)导出">
+                                    导出Excel
+                                </button>
+                                <div class="dropdown-menu">
+                                    <a class="dropdown-item" @click="exitExport(1)" href="javascript:">导出勾选内容</a>
+                                    <a class="dropdown-item" @click="exitExport(2)" href="javascript:">导出所有页</a>
+                                </div>
+                        </span>
+                        @can('出库管理-批量注释')<button @click="modal()" type="button" class="btn btn-sm ml-2 btn-outline-primary">批量注释</button>@endcan
                     </td>
                 </tr>
-            </tbody>
             </table>
+        </form>
+        <div class="modal fade " style="top: 20%" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
+            <div class="modal-dialog">
+                <div class="modal-content">
+                    <div class="modal-header">
+                        <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
+                    </div>
+                    <div class="modal-body">
+                        <input class="form-control" v-model="content" placeholder="注释内容">
+                    </div>
+                    <div class="modal-footer">
+                        <button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
+                        <button type="button" @click="batchComments()" class="btn btn-primary">提交批量注释</button>
+                    </div>
+                </div><!-- /.modal-content -->
+            </div><!-- /.modal -->
         </div>
+        <table class="table table-sm table-striped table-bordered table-hover text-nowrap card-body mt-2 ml-3">
+            <tr>
+                <th>
+                    <label for="all">
+                        <input id="all" type="checkbox" @click="checkAll($event)">全选
+                    </label>
+                </th>
+                <th>序号</th>
+                <th>编号</th>
+                <th>订单状态</th>
+                <th>仓库</th>
+                <th>客户</th>
+                <th>收货人</th>
+                <th>收货人名称</th>
+                <th>收货人电话</th>
+                <th>承运人</th>
+                <th>下单方名称</th>
+                <th>波次编号</th>
+                <th>客户订单号</th>
+                <th>快递单号</th>
+                <th>快递获取标记</th>
+                <th>快递获取时间</th>
+                <th style="width: 200px">产品代码</th>
+                <th style="width: 200px">产品条码</th>
+                <th style="width: 200px">产品名称</th>
+                <th>订单数量</th>
+                <th>备注</th>
+                <th>接口取消标记</th>
+                <th>拣货单打印标记</th>
+                <th>接口回传标记</th>
+                <th>订单冻结标记</th>
+                <th>收货人地址</th>
+            </tr>
+            <tr v-for="(order,i) in orders">
+                <td>
+                    <input class="checkItem" type="checkbox" :value="order.orderno" v-model="checkData">
+                </td>
+                <td>@{{ i+1 }}</td>
+                <td class="text-primary">@{{ order.orderno }}</td>
+                <td class="text-muted">@{{ order.sostatus }}</td>
+                <td> @{{ order.warehouseid }}</td>
+                <td >@{{ order.oracleBASCustomer_descr_c }}</td>
+                <td class="text-muted">@{{ order.consigneeid }}</td>
+                <td class="text-muted">@{{ order.consigneename }}</td>
+                <td class="text-muted">@{{ order.c_tel1 }}</td>
+                <td class="text-muted">@{{ order.carriername }}</td>
+                <td>@{{ order.issuepartyname }}</td>
+                <td>@{{ order.waveno }}</td>
+                <td>@{{ order.soreference1 }}</td>
+                <td>@{{ order.soreference5 }}</td>
+                <td>@{{ order.edisendflag2 }}</td>
+                <td>@{{ order.edisendtime2 }}</td>
+                <td colspan="4" class="text-center">
+                    <table v-if="order.oracle_d_o_c_order_details.length==1 || isBtn[order.orderno]" class="table table-sm">
+                        <tr v-for="oracleDOCOrderDetail in order.oracle_d_o_c_order_details">
+                            <td><div style="width: 180px;overflow: hidden">@{{ oracleDOCOrderDetail.sku }}</div></td>
+                            <td><div style="width: 180px;overflow: hidden">@{{ oracleDOCOrderDetail.alternate_sku1 }}</div></td>
+                            <td><div :title="oracleDOCOrderDetail.descr_c" class="tooltipTarget" style="width: 180px;overflow: hidden">@{{ oracleDOCOrderDetail.descr_c }}</div></td>
+                            <td>@{{ oracleDOCOrderDetail.qtyordered }}</td>
+                        </tr>
+                        <tr v-if="isBtn[order.orderno]">
+                            <td colspan="4">
+                                <b style="cursor:pointer;color: #4aa0e6;" @click="isBtn[order.orderno]=false;">点击收起明细</b>
+                            </td>
+                        </tr>
+                    </table>
+                    <b @click="unfold(order.orderno)" style="cursor:pointer;text-decoration: underline;color: #4aa0e6;" v-if="order.oracle_d_o_c_order_details.length>1 && !isBtn[order.orderno]">共有 @{{ order.oracle_d_o_c_order_details.length }}  件商品,点击展开</b>
+                </td>
+                <td>@{{ order.notes }}</td>
+                <td>@{{ order.erpcancelflag }}</td>
+                <td>@{{ order.picking_print_flag }}</td>
+                <td>@{{ order.edisendflag }}</td>
+                <td>@{{ order.releasestatus }}</td>
+                <td>@{{ order.c_address1 }}</td>
+            </tr>
+        </table>
+        {{$orders->appends($request)->links()}}
     </div>
 @endsection
 
 @section('lastScript')
-<style>
-    .color1{background-color: #FFA07A}
-    .color2{background-color: cornflowerblue}
-</style>
-<script>
-    new Vue({
-        el:"#list",
-        data:{
-            waybills:[
-                @foreach($waybills as $waybill)
-                {id:'{{$waybill->id}}',created_at:'{{$waybill->created_at}}',waybill_number:'{{$waybill->waybill_number}}',origination:'{{$waybill->origination}}',carrier_bill:'{{$waybill->carrier_bill}}'
-                    ,warehouse_weight:'{{$waybill->warehouse_weight}}',carrier_weight:'{{$waybill->carrier_weight}}',warehouse_weight_other:'{{$waybill->warehouse_weight_other}}',carrier_weight_other:'{{$waybill->carrier_weight_other}}',status:'{{$waybill->status}}'
-                    ,amount:'{{$waybill->amount}}',inquire_tel:'{{$waybill->inquire_tel}}',carrier_name:'{{$waybill->carrier_name}}',owner_name:'{{$waybill->owner_name}}',warehouse_weight_unit_name:'{{$waybill->warehouse_weight_unit_name}}'
-                    ,carrier_weight_unit_name:'{{$waybill->carrier_weight_unit_name}}',warehouse_weight_unit_other_name:'{{$waybill->warehouse_weight_unit_other_name}}',carrier_weight_unit_other_name:'{{$waybill->carrier_weight_unit_other_name}}'
-                    ,isBtn:false},
-                @endforeach
-            ],
-            filterData:{
-                created_at_start:'',created_at_end:'',waybill_number:'',carrier_bill:''
+    <script>
+        new Vue({
+            el:"#list",
+            data:{
+                filterData:{
+                    paginate:50,ordertime_start:'',ordertime_end:'',customerid:'',soreference1:'',soreference5:'',
+                },
+                checkData:[],
+                owners:[
+                    @foreach($customers as $customer)
+                    {!! $customer !!},
+                    @endforeach
+                ],
+                orders:[
+                    @foreach($orders as $order)
+                    {!! $order !!},
+                    @endforeach
+                ],
+                isBtn:{},
+                content:'',
             },
-            checkData:[],
-            errors:{},
-        },
-        watch:{
-            checkData:{
-                handler(){
-                    if (this.checkData.length === this.waybills.length){
-                        document.querySelector('#all').checked = true;
-                    }else {
-                        document.querySelector('#all').checked = false;
+            mounted:function () {
+                $(".tooltipTarget").tooltip({'trigger':'hover'});
+                this.initInputs();
+                $("#list").removeClass('d-none');
+            },
+            computed:{
+                isBeingFilterConditions:function(){
+                    for(let key in this.filterData){
+                        if(this.filterData[key] && key!='paginate'){
+                            return true
+                        }
                     }
+                    return false;
                 },
-                deep:true
-            }
-        },
-        mounted:function(){
-          $(".tooltipTarget").tooltip({'trigger':'hover'});
-          this.initInputs();
-          $("#list").removeClass('d-none');
-        },
-        computed:{
-            isBeingFilterConditions:function(){
-
-                for(let key in this.filterData){
-                    if(this.filterData[key]){
-                        return true
-                    }
-                }
-                return false;
-            },
 
-        },
-        methods:{
-            initInputs:function(){
-                let data=this;
-                let uriParts =decodeURI(location.href).split("?");
-                if(uriParts.length>1){
-                    let params = uriParts[1].split('&');
-                    params.forEach(function(paramPair){
-                        let pair=paramPair.split('=');
-                        let key = pair[0], val = pair[1];
-                        $('input[name="'+key+'"]').val(val);
-                        $('select[name="'+key+'"]').val(val);
-                        decodeURI(data.filterData[key]=val);
-                    });
-                }
             },
-            checkAll(e){
-                if (e.target.checked){
-                    this.waybills.forEach((el,i)=>{
-                        if (this.checkData.indexOf(el.id) == '-1'){
-                            this.checkData.push(el.id);
+            watch:{
+                checkData:{
+                    handler(){
+                        if (this.checkData.length === this.orders.length){
+                            document.querySelector('#all').checked = true;
+                        }else {
+                            document.querySelector('#all').checked = false;
                         }
-                    });
-                }else {
-                    this.checkData = [];
-                }
-            },
-            waybillExport(value){
-                if (value==1&&this.checkData.length<1){
-                    tempTip.setDuration(2000);
-                    tempTip.showSuccess('没有勾选任何记录');
-                    return;
+                    },
+                    deep:true
                 }
-                window.location.href="{{url('waybill/forwarding?created_at_start=')}}"
-                    +this.filterData.created_at_start+"&&created_at_end="+this.filterData.created_at_end
-                    +"&&waybill_number="+this.filterData.waybill_number+"&&carrier_bill="+this.filterData.carrier_bill
-                    +"&&exportType="+value+"&&checkData="+this.checkData;
             },
-            enlarge(e){
-                e.target.style.width="150px";
-            },
-            shrink(e){
-                e.target.style.width="50px";
-            },
-            submit(waybill_id,id=null){
-                if (!confirm('确定要提交吗?')){return;}
-                let _this=this;
-                let data={};
-                data['id'] = id??waybill_id;
-                data['carrier_bill'] = $("#carrier_bill"+waybill_id).val();
-                data['inquire_tel'] = $("#inquire_tel"+waybill_id).val();
-                data['amount'] = $("#amount"+waybill_id).val();
-                data['carrier_weight'] = $("#carrier_weight"+waybill_id).val();
-                data['carrier_weight_other'] = $("#carrier_weight_other"+waybill_id).val();
-                if (_this.errors["_"+data['id']])_this.errors["_"+data['id']]={};
-                axios.post("{{url('waybill/storeCarrierBill')}}",data)
-                    .then(function (response) {
-                        if (response.data.error){
+            methods:{
+                initInputs:function(){
+                    let data=this;
+                    let uriParts =decodeURI(location.href).split("?");
+                    if(uriParts.length>1){
+                        let params = uriParts[1].split('&');
+                        params.forEach(function(paramPair){
+                            let pair=paramPair.split('=');
+                            let key = pair[0], val = pair[1];
+                            $('input[name="'+key+'"]').val(val);
+                            $('select[name="'+key+'"]').val(val);
+                            decodeURI(data.filterData[key]=val);
+                        });
+                    }
+                },
+                //提交表单
+                submit:function(){
+                    let form = $("#form");
+                    form.submit();
+                },
+                //全选事件
+                checkAll(e){
+                    if (e.target.checked){
+                        this.orders.forEach((el,i)=>{
+                            if (this.checkData.indexOf(el.orderno) == '-1'){
+                                this.checkData.push(el.orderno);
+                            }
+                        });
+                    }else {
+                        this.checkData = [];
+                    }
+                },
+                //寻找客户
+                owner_seek:function (e) {
+                    let _this=this;
+                    let $val=e.target.value;
+                    if($val==='')_this.filterData.customerid='';
+                    else
+                        _this.owners.forEach(function (owner) {
+                            if (owner.descr_c.includes($val)){
+                                _this.filterData.customerid=owner.customerid;
+                            }
+                        });
+                },
+                unfold(orderno){
+                    this.$set(this.isBtn,orderno,true);
+                    console.log(this.isBtn);
+                },
+                exitExport(val){
+                    if (val==1){
+                        if (this.checkData.length<1) {
                             tempTip.setDuration(3000);
-                            tempTip.show(response.data.error);
-                            return
-                        }
-                        if (response.data.errors){
-                            Vue.set(_this.errors,"_"+data['id'],response.data.errors);
-                            setTimeout(function(){
-                                $(".tooltipTargetError").tooltip('show');
-                            },1);
+                            tempTip.showSuccess('没有勾选任何记录')
                             return;
                         }
-                        _this.waybills.some(function (waybill) {
-                            if (waybill.id===data['id']){
-                                waybill.carrier_bill=response.data.carrier_bill;
-                                waybill.inquire_tel=response.data.inquire_tel;
-                                waybill.amount=response.data.amount;
-                                waybill.carrier_weight=response.data.carrier_weight;
-                                waybill.carrier_weight_other=response.data.carrier_weight_other;
-                                waybill.isBtn=false;
-                                tempTip.setDuration(2000);
-                                tempTip.showSuccess('录入成功!');
+                        window.location.href="{{url('exit/index/forwarding?checkData=')}}"+this.checkData;
+                        return;
+                    }
+                    window.location.href="{{url('exit/index/forwarding?ordertime_start=')}}"+this.filterData.ordertime_start
+                    +"&&ordertime_end="+this.filterData.ordertime_end+"&&soreference1="+this.filterData.soreference1
+                    +"&&soreference5="+this.filterData.soreference5+"&&export="+true;
+                },
+                modal(){
+                  $("#myModal").modal('show');
+                },
+                batchComments(){
+                    let _this=this;
+                    if (this.checkData.length<1 || !this.content) {
+                        $("#myModal").modal('hide');
+                        tempTip.setDuration(3000);
+                        if (this.checkData.length<1) tempTip.showSuccess('没有勾选任何记录');
+                        else tempTip.showSuccess('没有输入任何内容');
+                        return;
+                    }
+                    axios.post('{{url('exit/create/batchComments')}}',{checkData:this.checkData,content:this.content})
+                        .then(function (response) {
+                            let sign=[];
+                            _this.orders.every(function (order) {
+                                if (sign.length===response.data.length)return false;
+                                response.data.every(function (data) {
+                                    if (order.orderno===data.orderno){
+                                        order.notes=data.notes;
+                                        sign.push(order.orderno);
+                                        return false;
+                                    }
+                                    return  true;
+                                });
                                 return true;
-                            }
+                            });
+                            tempTip.setDuration(3000);
+                            tempTip.showSuccess('注释完毕!')
+                            _this.content='';
+                        }).catch(function (err) {
+                            tempTip.setDuration(4000);
+                            tempTip.show('网络错误:'+err)
                         });
-                    }).catch(function (err) {
-                    tempTip.setDuration(3000);
-                    tempTip.show('网络异常:'+err);
-                    });
-            }}
-    });
-</script>
+                    $("#myModal").modal('hide');
+                }
+            },
+        });
+    </script>
 @endsection

+ 1 - 1
resources/views/exit/menu.blade.php

@@ -2,7 +2,7 @@
 <div class="container-fluid nav2" id="nav2">
     <div class="card">
         <ul class="nav nav-pills">
-            @can('入库管理-查询')
+            @can('出库管理-发运')
             <li class="nav-item">
                 <a class="nav-link" href="{{url('exit/index/forwarding')}}" :class="{active:isActive('index',2)}">查询</a>
             </li> @endcan

+ 3 - 3
resources/views/inventory/statement/changeInventory.blade.php

@@ -244,11 +244,11 @@
                 owner_seek:function (e) {
                     let _this=this;
                     let $val=e.target.value;
-                    if($val==='')_this.filterData.owner_id='';
+                    if($val==='')_this.filterData.descr_c='';
                     else
                         _this.owners.forEach(function (owner) {
-                            if (owner.name.includes($val)){
-                                _this.filterData.owner_id=owner.id;
+                            if (owner.descr_c.includes($val)){
+                                _this.filterData.descr_c=owner.descr_c;
                             }
                         });
                 },

+ 10 - 0
routes/web.php

@@ -219,3 +219,13 @@ Route::group(['prefix'=>'inventory'],function (){
     Route::get('statement/changeInventory/downLoadExcel','InventoryController@downLoadExcel');
     Route::post('statement/changeInventory/deleteExcel','InventoryController@deleteExcel');
 });
+
+/**
+ * 出库
+ */
+Route::group(['prefix'=>'exit'],function(){
+    //发运
+    Route::get('index/forwarding','ExitController@forwarding');
+    //批量注释
+    Route::post('create/batchComments','ExitController@batchComments');
+});