Explorar el Código

Merge branch 'zzd'

LD hace 5 años
padre
commit
d35026a363

+ 98 - 14
app/Http/Controllers/InventoryController.php

@@ -2,17 +2,26 @@
 
 namespace App\Http\Controllers;
 
+use App\Exports\Export;
+use App\OracleBasCustomer;
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\DB;
+use Maatwebsite\Excel\Facades\Excel;
 
 class InventoryController extends Controller
 {
-    public function changeInventory(Request $request){
+    public function conditionQuery(Request $request,$page=null,$paginate=null){
         $date_start=$request->input('date_start');
         $date_end=$request->input('date_end');
-        $start=microtime(true);
-        //$sql=' select * from (select ROWNUM r,result.*  from ( ';
-        $sql=' select customer.Descr_C 货主, 库位, sku.SKU 产品编码, sku.ALTERNATE_SKU1 产品条码, ';
+        $TOLocation=$request->input('TOLocation');
+        $LotAtt05=$request->input('LotAtt05');
+        $LotAtt02_start=$request->input('LotAtt02_start');
+        $descr_c=$request->input('descr_c');
+        $SKU=$request->input('SKU');
+        $ALTERNATE_SKU1=$request->input('ALTERNATE_SKU1');
+        $LotAtt02_end=$request->input('LotAtt02_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(移入数量)移入数量 ';
@@ -21,39 +30,114 @@ class InventoryController extends Controller
         $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"))."' ";
+        if ($TOLocation)$sql .= " and TOLocation like '".$TOLocation."%' ";
         $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"))."' ";
+        if ($TOLocation)$sql .= " and FMLOCATION like '".$TOLocation."%' ";
         $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"))."' ";
+        if ($TOLocation)$sql .= " and FMLocation like '".$TOLocation."%' ";
         $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"))."' ";
+        if ($TOLocation)$sql .= " and TOLocation like '".$TOLocation."%' ";
         $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.=' left join INV_LOT_LOC_ID storeStatus on storeStatus.LOTNUM=stockLog.FMLOTNUM ';
-        $sql.=' and storeStatus.LocationID=stockLog.库位 where rownum<=300 ';
+        $sql.=' left join INV_LOT_LOC_ID storeStatus on storeStatus.LOTNUM=stockLog.FMLOTNUM ';;
+        $sql.=' and storeStatus.LocationID=stockLog.库位 where 1=1';
+        if ($LotAtt05)$sql .=" and lot.LotAtt05 like '".$LotAtt05."%' ";
+        if ($LotAtt02_start)$sql.=" and lot.LotAtt02 >='".$LotAtt02_start." 00:00:00' ";
+        if ($LotAtt02_end)$sql.=" and lot.LotAtt02 <='".$LotAtt02_end." 23:59:59' ";
+        if ($descr_c)$sql.=" and customer.descr_c ='".$descr_c."' ";
+        if ($SKU)$sql.=" and sku.SKU like '".$SKU."%' ";
+        if ($ALTERNATE_SKU1)$sql.=" and sku.ALTERNATE_SKU1 like '".$ALTERNATE_SKU1."%' ";
+        if ($page&&$paginate)$sql.='  and ROWNUM<='.$page*$paginate;
         $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)data ';
+        $sql.=' )result)  ';
+        if ($page&&$paginate)$sql.='  where rn>='.($page-1)*$paginate;
+        return DB::connection('oracle')->select($sql);
+    }
+
+    public function changeInventory(Request $request){
         $page=$request->input('page')??1;
-        /*$sql.=" where data.r>".($page-1)*50;
-        $sql.=" and data.r<=".$page*50;*/
-        $oracleActTransactingLogs=DB::connection('oracle')->select($sql);
+        $paginate=$request->input('paginate')??50;
+        $oracleActTransactingLogs=$this->conditionQuery($request,$page,$paginate);
         $oracleActTransactingLogs=json_encode($oracleActTransactingLogs);
-        $end=microtime(true);
-        $date=$end-$start;
-        return view('inventory.statement.changeInventory',compact('oracleActTransactingLogs','page','date'));
+        $owners=OracleBasCustomer::select('descr_c')->get();
+        return view('inventory.statement.changeInventory',compact('oracleActTransactingLogs','page','owners'));
+    }
+
+    public function exportData(Request $request){
+        if ($request->input('export')==1){
+            $oracleActTransactingLogs=json_decode($request->input('checkData'),true);
+            return $this->export($oracleActTransactingLogs);
+        }
+        $oracleActTransactingLogs=$this->conditionQuery($request);
+        $oracleActTransactingLogs=json_encode($oracleActTransactingLogs);
+        $oracleActTransactingLogs=json_decode($oracleActTransactingLogs,true);
+        return $this->export($oracleActTransactingLogs);
+    }
+
+    public function export($oracleActTransactingLogs){
+        $row=[[
+            'customer_descr_c'=>'货主',
+            'TOLocation'=>'库位',
+            'LotAtt05'=>'属性仓',
+            'LotAtt02'=>'失效日期',
+            'SKU'=>'产品编码',
+            'ALTERNATE_SKU1'=>'产品条码',
+            'sku_Descr_C'=>'商品名称',
+            'LotAtt08'=>'质量状态',
+            'LotAtt04'=>'批号',
+            'come_sum'=>'移出数量',
+            'join_sum'=>'移入数量',
+            'QTY'=>'在库数量',
+            'QtyAllocated'=>'占用数量',
+        ]];
+        $list=[];
+        for ($i=0; $i<count($oracleActTransactingLogs);$i++){
+            $w=[
+                'customer_descr_c'=>$oracleActTransactingLogs[$i]['货主'],
+                'TOLocation'=>$oracleActTransactingLogs[$i]['库位'],
+                'LotAtt05'=>$oracleActTransactingLogs[$i]['属性仓'],
+                'LotAtt02'=>$oracleActTransactingLogs[$i]['失效日期'],
+                'SKU'=>$oracleActTransactingLogs[$i]['产品编码'],
+                'ALTERNATE_SKU1'=>$oracleActTransactingLogs[$i]['产品条码'],
+                'sku_Descr_C'=>$oracleActTransactingLogs[$i]['商品名称'],
+                'LotAtt08'=>$oracleActTransactingLogs[$i]['质量状态'],
+                'LotAtt04'=>$oracleActTransactingLogs[$i]['批号'],
+                'come_sum'=>$oracleActTransactingLogs[$i]['移出数量'],
+                'join_sum'=>$oracleActTransactingLogs[$i]['移入数量'],
+                'QTY'=>$oracleActTransactingLogs[$i]['在库数量'],
+                'QtyAllocated'=>$oracleActTransactingLogs[$i]['占用数量'],
+            ];
+            $list[$i]=$w;
+        }
+        return Excel::download(new Export($row,$list),date('YmdHis', time()).'-动库报表单.xlsx');
+    }
+    public function downLoadExcel(Request $request){
+        $fileName=storage_path('app\files\\'.$request->input('fileName'));
+        if (!file_exists($fileName))return "<h1 style='color: red;text-align:center'>请求过于频繁!</h1>";
+        return response()->download($fileName);
+    }
+    public function deleteExcel(Request $request){
+        $fileName=storage_path('app\files\\'.$request->input('fileName'));
+        return ["success"=>unlink($fileName)];
     }
 }

+ 13 - 7
app/Http/Controllers/PackageController.php

@@ -42,9 +42,9 @@ class PackageController extends Controller
         if ($request->input('logistic_number')){
             $packages=$this->preciseQuery('logistic_number',$request,$packages);
         }
-        if ($request->input('delivery_number')){
-            $packages=$this->preciseQuery('logistic_number',$request,$packages);
-        }
+/*        if ($request->input('delivery_number')){
+            $packages=$this->preciseQuery('delivery_number',$request,$packages);
+        }*/
         if ($request->input('created_at_start')){
             $created_at_start=$request->input('created_at_start')." 00:00:00";
             $packages=$packages->where('created_at','>=',$created_at_start);
@@ -107,6 +107,7 @@ class PackageController extends Controller
         $logistic_number=$request->input('logistic_number');
         $weight=$request->input('weight');
         $batch_number=$request->input('batch_number');
+        $order_code=$request->input('order_code');
         $paper_box_id=$request->input('paper_box_id');
         $isSamePackBatch=$request->input('is_same_pack_batch');
         if($logistic_number&&$batch_number)return redirect('package/create')->with('successError','录入失败!波次号和快递单号只能填一项!');
@@ -116,6 +117,7 @@ class PackageController extends Controller
         }elseif($logistic_number){
             $package=Package::where('logistic_number',$logistic_number)->first();
         }
+        if ($order_code)$package=Package::where('order_code',$order_code)->first();
         if (!$package && !$logistic_number)return redirect('package/create')->with('successError','录入失败!系统内没有对应波次的包裹!');
         $successTip = '操作成功';
         if ($package){
@@ -130,6 +132,7 @@ class PackageController extends Controller
                 $package->weight=$weight;
                 $package->paper_box_id=$paper_box_id;
                 $package->batch_number=$batch_number;
+                $package->order_code=$order_code;
                 $result=$accomplishToWMS->accomplishToWMS($package);
                 if ($result['result']=='success'){
                     if ($package->status=="记录异常")$package->status="已上传异常";
@@ -143,7 +146,8 @@ class PackageController extends Controller
                 'logistic_number'=>$logistic_number,
                 'weight'=>$weight,
                 'paper_box_id'=>$paper_box_id,
-                'batch_number'=>$batch_number
+                'batch_number'=>$batch_number,
+                'order_code'=>$order_code,
             ]);
             $successTip = "新建称重记录成功!单号:$logistic_number";
         }
@@ -319,10 +323,11 @@ class PackageController extends Controller
     }
     protected function validator(Request $request){
         $validator=Validator::make($request->input(),[
-            'logistic_number'=>['nullable','max:50'],
+            'logistic_number'=>['required_without_all:batch_number,order_code'],
+            'order_code'=>['required_without_all:logistic_number,batch_number'],
             'weight'=>'required|min:0|max:999999|numeric',
             'paper_box_id'=>'nullable|integer',
-            'batch_number'=>['required_without:logistic_number']
+            'batch_number'=>['required_without_all:logistic_number,order_code']
         ],[
             'required'=>':attribute 为必填项',
             'max'=>':attribute 字符过多或输入值过大',
@@ -330,12 +335,13 @@ class PackageController extends Controller
             'min'=>':attribute 不得为负',
             'numeric'=>':attribute 应为数字',
             'unique'=>':attribute 已存在',
-            'required_without'=>':attribute 与快递单号至少填一项'
+            'required_without_all'=>':attribute 与快递单号或订单号至少选一项'
         ],[
             'logistic_number'=>'快递单号',
             'weight'=>'重量',
             'paper_box_id'=>'纸箱',
             'batch_number'=>'波次号',
+            'order_code'=>'订单号',
         ]);
         return $validator;
     }

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

@@ -292,7 +292,7 @@ class RejectedBillItemController extends Controller
             'id_rejected_bill' => ['required', 'numeric', 'exists:rejected_bills,id'],
             'barcode_goods' => ['required', 'string','max:60'],
             'name_goods' => ['nullable', 'string','max:50'],
-            'amount' => ['numeric','nullable', 'max:99999'],
+            'amount' => ['numeric','required', 'max:99999'],
             'id_quality_label' => ['required','numeric',  'max:11'],
             'batch_number' => ['string', 'nullable',],
             'validity_at' => ['nullable','date_format:Y-m-d'],

+ 77 - 17
app/Http/Controllers/TestController.php

@@ -192,42 +192,102 @@ class TestController extends Controller
         // 先进后出“([{”入栈,")]}"出栈,轮询到出栈元素去映射栈顶,符合出栈,不符合直接返回
         //依次轮询 如果映射正确那么最后栈为空栈 否则返回false
     }
-    function test5(){
-        /*$sql='select customer.CUSTOMERID from BAS_Customer customer';
-        dd(DB::connection('oracle')->select($sql));*/
-        $sql=' select ';
-        $sql.=' customer.Descr_C 货主, 库位, sku.SKU 产品编码, sku.ALTERNATE_SKU1 产品条码, ';
+    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 占用数量 from ';
+        $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.=' left join INV_LOT_LOC_ID storeStatus on storeStatus.LOTNUM=stockLog.FMLOTNUM ';
-        $sql.=' and storeStatus.LocationID=stockLog.库位 where rownum<=50 ';
+        $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';
-        $oracleActTransactingLogs=DB::connection('oracle')->select($sql);
-        dd($oracleActTransactingLogs);
-        /*dd(OracleActTransactionLog::with(['oracleBasCustomer','oracleInvLotAtt','oracleBasSku'])
-            ->leftJoin('INV_LOT_LOC_ID',function (JoinClause $join){
-                $join->on('INV_LOT_LOC_ID.LOCATIONID','=','ACT_TRANSACTION_LOG.TOLOCATIONID')
-                    ->on('INV_LOT_LOC_ID.LOTNUM','=','ACT_TRANSACTION_LOG.FMLOTNUM');
-            })->paginate(5));*/
+        $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]);
+
+                }
+            }
+        }
     }
 }

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

@@ -102,6 +102,7 @@ class PackageController extends Controller
                 'status'=>'记录异常'
             ]);
         }
+        $createPackage->order_code=$receiveInputs['Orderno'];
         $createPackage->save();
         //活动波次同步  组合提总
         if ($receiveInputs['USERDEFINE2']&&strstr($receiveInputs['USERDEFINE2'],'组合')) {

+ 0 - 4
app/OracleActTransactionLog.php

@@ -27,8 +27,4 @@ class OracleActTransactionLog extends Model
     function oracleInvLotAtt(){
         return $this->hasOne('App\OracleInvLotAtt','lotnum','fmlotnum');
     }
-    function oracleInvLotLocId(){
-        //return $this->hasMany('App\OracleInvLotLocId',['LOTNUM','LocationID'],['FMLOTNUM','TOLocation']);
-        return $this->hasOne('App\OracleInvLotLocId','locationid','tolocation');
-    }
 }

+ 1 - 1
app/Package.php

@@ -10,7 +10,7 @@ class Package extends Model
     use ModelTimeFormat;
     protected $fillable=[
         'owner_id','logistic_number','delivery_number','batch_number','batch_rule','recipient','recipient_mobile','logistic_id',
-        'measuring_machine_id','weight','length','width','height','bulk','paper_box_id','status','weighed_at'
+        'measuring_machine_id','weight','length','width','height','bulk','paper_box_id','status','weighed_at','order_code'
     ];
     protected $appends=[
         'owner_name',

+ 9 - 3
database/migrations/2020_05_29_144440_add_inventory_authority.php

@@ -1,5 +1,6 @@
 <?php
 
+use App\Authority;
 use Illuminate\Database\Migrations\Migration;
 use Illuminate\Database\Schema\Blueprint;
 use Illuminate\Support\Facades\Schema;
@@ -7,7 +8,8 @@ use Illuminate\Support\Facades\Schema;
 class AddInventoryAuthority extends Migration
 {
     protected $authNames=[
-        "库存管理"
+        "库存管理",
+        "库存管理-动库报表"
     ];
     /**
      * Run the migrations.
@@ -16,7 +18,9 @@ class AddInventoryAuthority extends Migration
      */
     public function up()
     {
-        //
+        foreach ($this->authNames as $name){
+            if(!Authority::where('name',$name)->first())(new Authority(['name'=>$name,'alias_name'=>$name]))->save();
+        }
     }
 
     /**
@@ -26,6 +30,8 @@ class AddInventoryAuthority extends Migration
      */
     public function down()
     {
-        //
+        foreach ($this->authNames as $name){
+            Authority::where('name',$name)->delete();
+        }
     }
 }

+ 32 - 0
database/migrations/2020_06_01_135008_change_package_table.php

@@ -0,0 +1,32 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class ChangePackageTable extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::table('packages',function (Blueprint $table){
+            $table->string('order_code')->nullable()->comment('订单号');
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::table('packages',function (Blueprint $table){
+            $table->dropColumn('order_code');
+        });
+    }
+}

+ 323 - 0
resources/views/exit/index/forwarding.blade.php

@@ -0,0 +1,323 @@
+@extends('layouts.app')
+
+@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>
+                </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>
+                    </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>
+                    <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>
+                    <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>
+                    </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>
+                </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>
+                    </td>
+                </tr>
+            </tbody>
+            </table>
+        </div>
+    </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:''
+            },
+            checkData:[],
+            errors:{},
+        },
+        watch:{
+            checkData:{
+                handler(){
+                    if (this.checkData.length === this.waybills.length){
+                        document.querySelector('#all').checked = true;
+                    }else {
+                        document.querySelector('#all').checked = 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);
+                        }
+                    });
+                }else {
+                    this.checkData = [];
+                }
+            },
+            waybillExport(value){
+                if (value==1&&this.checkData.length<1){
+                    tempTip.setDuration(2000);
+                    tempTip.showSuccess('没有勾选任何记录');
+                    return;
+                }
+                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){
+                            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);
+                            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('录入成功!');
+                                return true;
+                            }
+                        });
+                    }).catch(function (err) {
+                    tempTip.setDuration(3000);
+                    tempTip.show('网络异常:'+err);
+                    });
+            }}
+    });
+</script>
+@endsection

+ 15 - 0
resources/views/exit/index/menu.blade.php

@@ -0,0 +1,15 @@
+<div id="nav2">
+    @component('exit.menu')
+    @endcomponent
+    <div class="container-fluid nav3">
+        <div class="card menu-third" >
+            <ul class="nav nav-pills">
+                @can('出库管理-发运')
+                    <li class="nav-item">
+                        <a class="nav-link text-dark" href="{{url('exit/index/forwarding')}}" :class="{active:isActive('forwarding',3)}">发运</a>
+                    </li> @endcan
+            </ul>
+        </div>
+    </div>
+</div>
+

+ 11 - 0
resources/views/exit/menu.blade.php

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

+ 175 - 24
resources/views/inventory/statement/changeInventory.blade.php

@@ -5,27 +5,90 @@
     @component('inventory.statement.menu')@endcomponent
 <div id="list" class="d-none card container-fluid" style="min-width: 1500px">
     <form method="GET" action="{{url('inventory/statement/changeInventory')}}" id="form">
-        <div class="text-nowrap mb-0" style="background: #fff;">
-            <div v-if="isBeingFilterConditions">
-                <div><div class="col" style="padding:0">
+        <table class="table  table-sm table-bordered text-nowrap  mb-0">
+            <tr v-if="isBeingFilterConditions">
+                <td colspan="10">
+                    <div class="col" style="padding:0">
                         <a  href="{{url('inventory/statement/changeInventory')}}"><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">
+                    </div></td>
+            </tr>
+            <tr>
+                <td >
+                    <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 >
                     <input type="date" name="date_start" class=" form-control-sm tooltipTarget" title="选择显示指定日期的起始时间"
                            v-model="filterData.date_start" :class="filterData.created_at_start?'bg-warning':''">
+                </td>
+                <td>
+                    <input name="TOLocation" v-model="filterData.TOLocation" class="form-control-sm tooltipTarget" placeholder="库位" :class="filterData.TOLocation?'bg-warning':''">
+                </td>
+                <td >
+                    <input name="LotAtt05" v-model="filterData.LotAtt05" class="form-control-sm tooltipTarget" placeholder="属性仓" :class="filterData.LotAtt05?'bg-warning':''">
+                </td>
+                <td >
+                    <input type="date" class=" form-control-sm tooltipTarget" name="LotAtt02_start" title="选择显示失效日期的起始时间"
+                           v-model="filterData.LotAtt02_start" :class="filterData.LotAtt02_start?'bg-warning':''" >
+                </td>
+                <td colspan="5"></td>
+            </tr>
+            <tr>
+                <td >
+                    <input type="text" class="form-control-sm tooltipTarget" placeholder="客户"
+                           style="width:70px" @input="owner_seek"
+                           title="输入关键词快速定位下拉列表,回车确定">
+                    <select name="descr_c" v-model="filterData.descr_c" @change="submit" style="max-width: 100px" class="form-control-sm tooltipTarget"  title="选择要显示的客户" :class="filterData.descr_c?'bg-warning':''">
+                        <option >    </option>
+                        <option v-for="owner in owners" :value="owner.descr_c" >@{{owner.descr_c}}</option>
+                    </select>
+                </td>
+                <td >
                     <input type="date" class=" form-control-sm tooltipTarget" name="date_end" title="选择显示指定日期的结束时间"
                            v-model="filterData.date_end" :class="filterData.created_at_end?'bg-warning':''" >
-                    <button type="submit" class="btn btn-sm btn-outline-dark">查询</button>
-                </div>
-
-            </div>
-        </div>
+                </td>
+                <td>
+                    <input name="SKU" v-model="filterData.SKU" class="form-control-sm tooltipTarget" placeholder="产品编码" :class="filterData.SKU?'bg-warning':''">
+                </td>
+                <td >
+                    <input name="ALTERNATE_SKU1" v-model="filterData.ALTERNATE_SKU1" class="form-control-sm tooltipTarget" placeholder="产品条码" :class="filterData.ALTERNATE_SKU1?'bg-warning':''">
+                </td>
+                <td >
+                    <input type="date" class=" form-control-sm tooltipTarget" name="LotAtt02_end" title="选择显示失效日期的结束时间"
+                           v-model="filterData.LotAtt02_end" :class="filterData.LotAtt02_end?'bg-warning':''" >
+                </td>
+                <td colspan="5">
+                    <input hidden type="submit" >
+                </td>
+            </tr>
+            <tr>
+                <td colspan="9">
+                               <span class="dropdown">
+                                        <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="processExport(1)" href="javascript:">导出勾选内容</a>
+                                            <a class="dropdown-item" @click="processExport(2)" href="javascript:">导出所有页</a>
+                                        </div>
+                                    </span>
+                </td>
+            </tr>
+        </table>
     </form>
     <table class="table table-sm table-striped table-bordered table-hover text-nowrap card-body mt-2">
         <tr>
+            <th>
+                <label for="all">
+                    <input id="all" type="checkbox" @click="checkAll($event)">全选
+                </label>
+            </th>
+            <th>序号</th>
             <th>货主</th>
             <th>库位</th>
             <th>产品编码</th>
@@ -40,7 +103,11 @@
             <th>在库数量</th>
             <th>占用数量</th>
         </tr>
-        <tr v-for="oracleActTransactingLog in oracleActTransactingLogs">
+        <tr v-for="(oracleActTransactingLog,i) in oracleActTransactingLogs">
+            <td>
+                <input class="checkItem" type="checkbox" :value="oracleActTransactingLog" v-model="checkData">
+            </td>
+            <td>@{{ i+1 }}</td>
             <td class="text-primary">@{{ oracleActTransactingLog.货主 }}</td>
             <td class="text-muted">@{{ oracleActTransactingLog.库位 }}</td>
             <td class="text-muted">@{{ oracleActTransactingLog.产品编码 }}</td>
@@ -56,14 +123,25 @@
             <td>@{{ oracleActTransactingLog.占用数量 }}</td>
         </tr>
     </table>
-
-    {{--<div>
-        <button type="button" @click="pageUp()">上一页</button>
-        <button type="button" @click="pageDown()">下一页</button>
-        <input name="page" placeholder="去往指定页">
-        <span v-if="oracleActTransactingLogs && oracleActTransactingLogs.length>0">@{{ oracleActTransactingLogs[0].sum }}</span>
-        <span v-if="oracleActTransactingLogs && oracleActTransactingLogs.length>0">@{{ page }}/@{{ Math.ceil(oracleActTransactingLogs[0].sum/50) }}</span>
-    </div>--}}
+    <form method="post" hidden action="{{url('inventory/statement/changeInventory/export')}}" id="checkDataForm">
+        @csrf
+        <input name="checkData" :value="checkData | json">
+        <input name="export" :value="filterData.export">
+        <input name="date_start" :value="filterData.date_start">
+        <input name="date_end" :value="filterData.date_end">
+        <input name="SKU" :value="filterData.SKU">
+        <input name="TOLocation" :value="filterData.TOLocation">
+        <input name="LotAtt05" :value="filterData.LotAtt05">
+        <input name="LotAtt02_start" :value="filterData.LotAtt02_start">
+        <input name="LotAtt02_end" :value="filterData.LotAtt02_end">
+        <input name="descr_c" :value="filterData.descr_c">
+        <input name="ALTERNATE_SKU1" :value="filterData.ALTERNATE_SKU1">
+    </form>
+    <div >
+        <button type="button" @click="pageUp()" :readonly="page>1?false:true" class="btn btn-sm " :class="page>1?'btn-outline-info':''">上一页</button>
+        <button type="button" @click="pageDown()" class="btn btn-sm btn-outline-info ml-5">下一页</button>
+        <input  @keyup.enter="pageSkip($event)" class="form-control-sm ml-3 tooltipTarget" :placeholder="'当前页数:'+page" title="去往指定页">
+    </div>
 </div>
 @endsection
 
@@ -74,7 +152,14 @@
             data:{
                 oracleActTransactingLogs:{!! $oracleActTransactingLogs !!},
                 page:Number('{{$page}}'),
-                filterData:{date_start:'',date_end:''},
+                filterData:{date_start:'',date_end:'',SKU:'',paginate:"50",TOLocation:'',
+                    LotAtt05:'',LotAtt02_start:'',LotAtt02_end:'',descr_c:'',ALTERNATE_SKU1:'',export:''},
+                owners:[
+                    @foreach($owners as $owner)
+                    {!! $owner !!},
+                    @endforeach
+                ],
+                checkData:[],
             },
             mounted:function () {
                 $(".tooltipTarget").tooltip({'trigger':'hover'});
@@ -85,7 +170,7 @@
                 isBeingFilterConditions:function(){
 
                     for(let key in this.filterData){
-                        if(this.filterData[key]){
+                        if(this.filterData[key] && key!='paginate'){
                             return true
                         }
                     }
@@ -93,6 +178,18 @@
                 },
 
             },
+            watch:{
+                checkData:{
+                    handler(){
+                        if (this.checkData.length === this.oracleActTransactingLogs.length){
+                            document.querySelector('#all').checked = true;
+                        }else {
+                            document.querySelector('#all').checked = false;
+                        }
+                    },
+                    deep:true
+                }
+            },
             methods:{
                 initInputs:function(){
                     let data=this;
@@ -116,6 +213,60 @@
                 pageDown(){
                     this.page=this.page+1;
                     window.location.href="{{url('inventory/statement/changeInventory?page=')}}"+this.page;
+                },
+                pageSkip(e){
+                    this.page=e.target.value;
+                  if (Number(this.page)<=0){
+                      tempTip.setDuration(2000);
+                      tempTip.show('页数不存在! ');
+                      return
+                  }
+                  window.location.href="{{url('inventory/statement/changeInventory?page=')}}"+this.page;
+                },
+                //提交表单
+                submit:function(){
+                    let form = $("#form");
+                    form.submit();
+                },
+                //全选事件
+                checkAll(e){
+                    if (e.target.checked){
+                        this.oracleActTransactingLogs.forEach((el,i)=>{
+                            if (this.checkData.indexOf(el) == '-1'){
+                                this.checkData.push(el);
+                            }
+                        });
+                    }else {
+                        this.checkData = [];
+                    }
+                },
+                //寻找客户
+                owner_seek:function (e) {
+                    let _this=this;
+                    let $val=e.target.value;
+                    if($val==='')_this.filterData.owner_id='';
+                    else
+                        _this.owners.forEach(function (owner) {
+                            if (owner.name.includes($val)){
+                                _this.filterData.owner_id=owner.id;
+                            }
+                        });
+                },
+                processExport:function(value){
+                    if (value==1&&this.checkData.length <= 0) {
+                        tempTip.setDuration(2000);
+                        tempTip.showSuccess('没有勾选任何记录');
+                        return
+                    }
+                    this.filterData.export=value;
+                    setTimeout(function () {
+                        $("#checkDataForm").submit();
+                    },1);
+                },
+            },
+            filters:{
+                json(value) {
+                    return JSON.stringify(value);
                 }
             },
         });

+ 1 - 1
resources/views/inventory/statement/menu.blade.php

@@ -4,7 +4,7 @@
     <div class="container-fluid nav3">
         <div class="card menu-third" >
             <ul class="nav nav-pills">
-                @can('库存管理')
+                @can('库存管理-动库报表')
                     <li class="nav-item">
                         <a class="nav-link text-dark" href="{{url('inventory/statement/changeInventory')}}" :class="{active:isActive('changeInventory',3)}">动库报表</a>
                     </li> @endcan

+ 3 - 0
resources/views/layouts/menu.blade.php

@@ -7,6 +7,9 @@
         @can('入库管理')
             <li class="nav-item"><a href="{{url("store")}}" class="nav-link"
                                     :class="{active:isActive('store',1)}">入库管理</a></li> @endcan
+        @can('出库管理')
+            <li class="nav-item"><a href="{{url("exit/index/forwarding")}}" class="nav-link"
+                                    :class="{active:isActive('exit',1)}">出库管理</a></li> @endcan
         @can('运输管理')
             <li class="nav-item"><a href="{{url("waybill/index")}}" class="nav-link"
                                     :class="{active:isActive('waybill',1)}">运输管理</a></li> @endcan

+ 1 - 2
resources/views/waybill/index.blade.php

@@ -20,7 +20,6 @@
                         <li class="nav-item">
                             <a class="nav-link" href="{{url('waybill/index/ZF')}}" :class="{active:isActive('ZF',3)}">直发车</a>
                         </li> @endcan
-
                 </ul>
             </div>
         </div>
@@ -68,7 +67,7 @@
                         <td  >
                             <input type="text" title="承运商单号:支持15内模糊搜索与15天外精确搜索"  name="carrier_bill" placeholder="承运商单号"
                                    class="form-control-sm  tooltipTarget" v-model="filterData.carrier_bill" style="vertical-align: middle" :class="filterData.carrier_bill?'bg-warning':''"></td>
-                        <td width="50%"></td>
+                        <td></td>
                     </tr>
                     <tr>
                         <td  >

+ 30 - 1
resources/views/weight/package/create.blade.php

@@ -21,6 +21,8 @@
                                 <a class="nav-link" :class="[windowStatus.batch_input ?'active' : '']" href="#">波次号</a></li>
                             <li class="nav-item" @click="windowSwitchLogistic">
                                 <a class="nav-link" :class="[windowStatus.logistic_input ?'active' : '']" href="#">快递单号</a></li>
+                            <li class="nav-item" @click="windowSwitchOrder">
+                                <a class="nav-link" :class="[windowStatus.order_input ?'active' : '']" href="#">订单号</a></li>
                         </ul>
                         <div class="" v-if="windowStatus.logistic_input">
                             <div class="form-group row">
@@ -36,6 +38,20 @@
                                 </div>
                             </div>
                         </div>
+                    <div class="" v-if="windowStatus.order_input">
+                        <div class="form-group row">
+                            <label for="order_code" class="col-2 col-form-label text-right text-info">订单号</label>
+                            <div class="col-8">
+                                <input id="order_code" type="text" class="form-control @error('order_code') is-invalid @enderror"
+                                       name="order_code" autocomplete="off" value="{{ old('order_code')}}">
+                                @error('order_code')
+                                <span class="invalid-feedback" role="alert">
+                                    <strong>{{ $errors->first('order_code') }}</strong>
+                            </span>
+                                @enderror
+                            </div>
+                        </div>
+                    </div>
                         <div class="text-danger" v-if="windowStatus.batch_input">
                             <div class="form-group row">
                                 <label for="batch_number" class="col-2 col-form-label text-right">波次号</label>
@@ -99,7 +115,12 @@
                     @endforeach
                 ],
                 paperBox_id:'',
-                windowStatus:{logistic_input:false, batch_input:true},
+                windowStatus:{logistic_input:'{{old('logistic_number')}}', batch_input:'{{old('batch_number')}}',order_input:'{{old('order_code')}}'}
+            },
+            mounted:function(){
+                if (!this.windowStatus.logistic_input && !this.windowStatus.batch_input && !this.windowStatus.order_input){
+                    this.windowStatus.batch_input=true;
+                }
             },
             methods:{
                 paperBox_seek:function (e) {
@@ -117,11 +138,19 @@
                     this.windowStatus.logistic_input=true;
                     this.windowStatus.batch_input=false;
                     this.inputting.is_same_pack_batch=false;
+                    this.windowStatus.order_input=false;
                 },
                 windowSwitchBatch:function (e) {
                     this.windowStatus.logistic_input=false;
                     this.windowStatus.batch_input=true;
                     this.inputting.is_same_pack_batch=false;
+                    this.windowStatus.order_input=false;
+                },
+                windowSwitchOrder:function (e) {
+                    this.windowStatus.order_input=true;
+                    this.windowStatus.logistic_input=false;
+                    this.windowStatus.batch_input=false;
+                    this.inputting.is_same_pack_batch=false;
                 },
                 x:function (e) {
                     if(this.inputting.is_same_pack_batch){

+ 9 - 7
resources/views/weight/package/index.blade.php

@@ -52,18 +52,18 @@
                                     <input hidden type="submit" >
                                 </td>
 
-                                <td >
-                                    <input :class="filterData.logistic_number?'bg-warning':''" type="text" title="支持15内模糊搜索与15天外精确搜索" name="logistic_number" class="form-control-sm  tooltipTarget" v-model="filterData.logistic_number" style="vertical-align: middle" placeholder="快递单号"></td>
-                                <td >
-                                    <input :class="filterData.delivery_number?'bg-warning':''" type="text" title="支持15内模糊搜索与15天外精确搜索" name="delivery_number" class="form-control-sm  tooltipTarget" v-model="filterData.delivery_number" style="vertical-align: middle" placeholder="发货单号"></td>
-                                <td colspan="5"></td>
+                                <td>
+                                    <input :class="filterData.logistic_number?'bg-warning':''" type="text" title="快递单号:支持15内模糊搜索与15天外精确搜索" name="logistic_number" class="form-control-sm  tooltipTarget" v-model="filterData.logistic_number" style="vertical-align: middle" ></td>
+                                {{--<td >
+                                    <input :class="filterData.delivery_number?'bg-warning':''" type="text" title="支持15内模糊搜索与15天外精确搜索" name="delivery_number" class="form-control-sm  tooltipTarget" v-model="filterData.delivery_number" style="vertical-align: middle" placeholder="发货单号"></td>--}}
+                                <td colspan="6"></td>
                             </tr>
                             <tr>
                                 <td>
                                     <input style="width: 150px" type="date" name="created_at_end" v-model="filterData.created_at_end" :class="filterData.created_at_end?'bg-warning':''" class="form-control-sm tooltipTarget" title="选择显示指定日期的结束时间">
                                 </td>
                                 <td >
-                                    <input type="text" title="支持15内模糊搜索与15天外精确搜索" name="batch_number" class="form-control-sm  tooltipTarget" v-model="filterData.batch_number"  :class="filterData.batch_number?'bg-warning':''" style="vertical-align: middle" placeholder="波次号"></td>
+                                    <input type="text" title="波次号:支持15内模糊搜索与15天外精确搜索" name="batch_number" class="form-control-sm  tooltipTarget" v-model="filterData.batch_number"  :class="filterData.batch_number?'bg-warning':''" style="vertical-align: middle" ></td>
                             </tr>
                             <tr>
                                 <td>
@@ -99,6 +99,7 @@
                             <th>货主</th>
                             <th>快递单号</th>
                             <th>波次号</th>
+                            <th>订单号</th>
                             <th>物流公司</th>
                             <th>设备</th>
                             <th>重(KG)</th>
@@ -120,6 +121,7 @@
                             <td>@{{package.ownerName}}</td>
                             <td>@{{package.logisticNumber}}</td>
                             <td class="text-muted">@{{package.batchNumber}}</td>
+                            <td>@{{package.order_code}}</td>
                             <td class="text-muted">@{{package.logisticName}}</td>
                             <td class="text-muted">@{{package.measuringMachineName}}</td>
                             <td>@{{package.weight}}</td>
@@ -161,7 +163,7 @@
                         ,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}}'},
+                        status:'{{$package->status}}',created_at:'{{$package->created_at}}',weighed_at:'{{$package->weighed_at}}',order_code:'{{$package->order_code}}'},
                     @endforeach
                 ],
                 i:0,

+ 3 - 0
routes/web.php

@@ -215,4 +215,7 @@ Route::group(['prefix'=>'personnel'],function(){
 Route::group(['prefix'=>'inventory'],function (){
     //动库报表
     Route::get('statement/changeInventory','InventoryController@changeInventory');
+    Route::post('statement/changeInventory/export','InventoryController@exportData');
+    Route::get('statement/changeInventory/downLoadExcel','InventoryController@downLoadExcel');
+    Route::post('statement/changeInventory/deleteExcel','InventoryController@deleteExcel');
 });

+ 17 - 0
tests/webApi/thirdPart/flux/PackageController.http

@@ -0,0 +1,17 @@
+# For a quick start check out our HTTP Requests collection (Tools|HTTP Client|Open HTTP Requests Collection).
+##
+## Following HTTP Request Live Templates are available:
+## * 'gtrp' and 'gtr' create a GET request with or without query parameters;
+## * 'ptr' and 'ptrp' create a POST request with a simple or parameter-like body;
+## * 'mptr' and 'fptr' create a POST request to submit a form with a text or file field (multipart/form-data);
+
+POST bswas/api/thirdPart/flux/package/new
+Content-Type: application/json
+
+{"request":{"TASKID":"TEST3509760355826","Orderno":"TESTSO200302002282","palletid":"TEST3509760355826","SOReference5":"TEST3509760355826",
+  "Customer":"TESTBILI","Consigneename":"TEST吴凡","CarrierID":"TESTYUNDA","USERDEFINE1":"TESTW200302000204","USERDEFINE2":"TEST09.[BILI]截单波次","USERDEFINE3":"TEST"}}
+
+###
+
+
+