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

新建波次查询 and 取消打印 by 'zengjun'

ajun 5 лет назад
Родитель
Сommit
9799d53da4

+ 64 - 6
app/Http/Controllers/WaveController.php

@@ -2,11 +2,12 @@
 
 
 namespace App\Http\Controllers;
 namespace App\Http\Controllers;
 
 
-use App\Authority;
+use App\Exports\DefaultExport;
 use App\Services\WaveService;
 use App\Services\WaveService;
 use Illuminate\Http\Request;
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\Gate;
 use Illuminate\Support\Facades\Gate;
+use Maatwebsite\Excel\Facades\Excel;
 
 
 class WaveController extends Controller
 class WaveController extends Controller
 {
 {
@@ -21,7 +22,7 @@ class WaveController extends Controller
         if(!Gate::allows('订单管理-波次-查询')){ return redirect(url('/'));  }
         if(!Gate::allows('订单管理-波次-查询')){ return redirect(url('/'));  }
         $waveService = app("WaveService");
         $waveService = app("WaveService");
         $waves = $waveService->queryWave($request);
         $waves = $waveService->queryWave($request);
-        $waveStatus = $waveService->getWaveStatus();
+        //$waveStatus = $waveService->getWaveStatus();
         $param =  $waveService->getPageParameter($request);
         $param =  $waveService->getPageParameter($request);
         $search = $waveService->getSearchCondition($request);
         $search = $waveService->getSearchCondition($request);
         foreach ($waves as $index=>$wave){
         foreach ($waves as $index=>$wave){
@@ -37,26 +38,36 @@ class WaveController extends Controller
             }
             }
             if(!is_null($wave->userdefine2)){
             if(!is_null($wave->userdefine2)){
                 $str = $wave->userdefine2;
                 $str = $wave->userdefine2;
-                $index = strpos($str,'-EX');
-                $wave->expressPrinting = substr($str,0,$index);
-                $wave->expressPrintTime = substr($str,$index+3);
+                if(strpos($str,'-EX')){
+                    $index = strpos($str,'-EX');
+                    $wave->expressPrinting = substr($str,0,$index);
+                    $wave->expressPrintTime = substr($str,$index+3);
+                }else if(strpos($str,'-Auto')){
+                    $index = strpos($str,'-Auto');
+                    $wave->expressPrinting = substr($str,0,$index);
+                    $wave->expressPrintTime = substr($str,$index+5);
+                }
             }
             }
         }
         }
-        return view("order/wave/search",compact('waves','waveStatus','param','search'));
+        return view("order/wave/search",compact('waves','param','search'));
     }
     }
 
 
     public function create(){
     public function create(){
 
 
     }
     }
+    // todo
     public function store(Request $request){
     public function store(Request $request){
 
 
     }
     }
+
     public function edit($id){
     public function edit($id){
 
 
     }
     }
+
     public function update(Request $request, $id){
     public function update(Request $request, $id){
 
 
     }
     }
+
     public function destroy($id){
     public function destroy($id){
 
 
     }
     }
@@ -74,5 +85,52 @@ class WaveController extends Controller
         return $meg;
         return $meg;
     }
     }
 
 
+    //
+    public function exportExcelOnParams(Request $request){
+        $waveService = app("WaveService");
+        ini_set('max_execution_time',2500);
+        ini_set('memory_limit','1526M');
+
+        $waves  = $waveService->downloadExec($request);
+        $row = $waveService->getExcelFromHead();
+
+        $data = [];
+        foreach ($waves as $index=>$wave){
+            $arr= [
+                'waveNo' => $wave->waveno,
+                'codename_c' => $wave->codename_c,
+                'waveRule' => $wave->waverule,
+                'descr' => $wave->descr,
+                'descr_c' => $wave->descr_c,
+                'addWho' => $wave->addwho,
+                'addTime' => $wave->addtime,
+                'pickerPrint'=>'',
+                'pickerPrintTime'=>'',
+                'expressPrinting'=>'',
+                'expressPrintTime'=> ''
+            ];
+            if(!is_null($wave->userdefine1)){
+                $str = $wave->userdefine1;
+                $index = strpos($str,'-PK');
+                $arr['pickerPrint'] = substr($str,0,$index);
+                $arr['pickerPrintTime']= substr($str,$index+3);
+            }
+            if(!is_null($wave->userdefine2)){
+                $str = $wave->userdefine2;
+                if(strpos($str,'-EX')){
+                    $index = strpos($str,'-EX');
+                    $arr['expressPrinting'] =substr($str,0,$index);
+                    $arr['expressPrintTime'] = substr($str,$index+3);
+                }else if(strpos($str,'-Auto')){
+                    $index = strpos($str,'-Auto');
+                    $arr['expressPrinting'] =substr($str,0,$index);
+                    $arr['expressPrintTime'] = substr($str,$index+5);
+                }
+
+            }
+            $data[] = $arr;
+        }
+        return Excel::download(new DefaultExport($row,$data),date('YmdHis', time()).'-波次表.xlsx');
+    }
 
 
 }
 }

+ 196 - 0
app/Services/WaveService.php

@@ -0,0 +1,196 @@
+<?php
+
+
+namespace App\Services;
+
+
+use App\OracleDOCWaveHeader;
+use Illuminate\Http\Request;
+use Illuminate\Support\Facades\DB;
+
+class WaveService
+{
+    public function queryWave(Request $request)
+    {
+        $sql = $this->createSqlByCondition($request);
+        $dataSet = DB::connection('oracle')->select(DB::raw($sql));
+        return $dataSet;
+    }
+
+    public function getPageParameter(Request $request)
+    {
+        $page = $request->input('page') ?? 1;
+        $paginate = $request->input('paginate') ?? 50;
+        $sql = "select count(1) as count from doc_wave_header " . $this->getQueryCondition($request);
+        $count = DB::connection('oracle')->select(DB::raw($sql))[0]->count;
+        $pageTotal = ceil($count / $paginate);
+        $parameter = ['currPage' => $page, 'paginate' => $paginate, 'count' => $count, 'pageTotal' => $pageTotal];
+        return $parameter;
+    }
+
+
+    public function createSqlByCondition(Request $request)
+    {
+        $childSql = " select row_number() over (order by addTime desc ) nums,UdfPrintFlag2,WaveNo,WaveStatus,Descr,CarrierID,WaveDispatchID,addWho,addTime,WaveRule,UserDefine1,UserDefine2 from doc_wave_header";
+        $childSql .= $this->getQueryCondition($request);
+        $childSql = "( select *  from (" . $childSql . ")";
+        $childSql .= $this->getPagingCondition($request);
+        $childSql .= " ) wave_header ";
+        /*
+         * Wav$idsNo 波次编号,WaveStatus 波次状态,CODENAME_C 波次状态编码,Descr 波次描述,Descr_c 承运人,addTime 添加时间,addWho 操作人
+         * WaveRule
+         * USERDEFINE1 pengzhenzhen-PK2020-07-22 16:49:37    拣货人打印人及时间
+         * USERDEFINE2 pengzhenzhen-EX2020-07-22 16:51:43    快递单打印人及时间
+         *
+         */
+        $sql = ' select wave_header.WaveNo,wave_header.WaveStatus,codes.CODENAME_C,wave_header.Descr,customer.Descr_c,wave_header.addTime,wave_header.addWho,wave_header.WaveRule,wave_header.UserDefine1,wave_header.UserDefine2,wave_header.WaveDispatchID,wave_header.UdfPrintFlag2 from';
+        $sql .= $childSql;
+        $sql .= " left join BAS_CUSTOMER  customer on  customer.CustomerID  = wave_header.CarrierID and customer.CUSTOMER_TYPE = 'CA'";
+        $sql .= " left join BAS_CODES codes on wave_header.WaveStatus = codes.CODE and codes.codeId = 'SO_STS'";
+        return $sql;
+    }
+
+    // cancel Print
+    public function cancelPrint($ids)
+    {
+        DB::enableQueryLog();
+        $meg = ['success' => false, 'fail_info' => null];
+        if (!$ids) {
+            $meg['fail_info'] = '没有选中需要取消打印标记的波次!';
+            return $meg;
+        }
+        if (is_string($ids)) {
+            $ids = [$ids];
+        }
+        $cancelPrint = OracleDOCWaveHeader::whereIn("WAVENO", $ids)->update(['udfprintflag2' => 'N','UserDefine2'=>'']);
+        if (!$cancelPrint) {
+            $meg['fail_info'] = '没有选中需要取消打印标记的波次!';
+            return $meg;
+        }
+        $meg['success'] = true;
+        return $meg;
+    }
+
+    public function getWaveStatus()
+    {
+        $sql = "select CODE,CODENAME_C from BAS_CODES where CODEID = 'SO_STS'";
+        $dataSet = DB::connection('oracle')->select(DB::raw($sql));
+        return $dataSet;
+    }
+
+    public function getQueryCondition(Request $request)
+    {
+        $start_time = $request->input('start_time') ?? null;
+        $end_time = $request->input('end_time') ?? null;
+        $wave_num = $request->input('wave_num') ?? null;
+        $wave_status = $request->input('wave_status') ?? null;
+        $childSql = " where 1=1 ";
+        if ($start_time) {
+            $childSql .= " and addTime > '" . $start_time . " 00:00:00'";
+        }
+        if ($end_time) {
+            $childSql .= " and addTime < '" . $end_time . " 23:59:59'";
+        }
+        if ($wave_num) {
+            $childSql .= " and waveNo like '" . $wave_num . "'";
+        }
+        if ($wave_status) {
+            $childSql .= " and waveStatus = " . $wave_status;
+        }
+        return $childSql;
+    }
+
+    public function getPagingCondition(Request $request)
+    {
+        $page = $request->input('page') ?? 1;
+        $paginate = $request->input('paginate') ?? 50;
+        $childSql = " where nums >  " . ($page - 1) * $paginate . " and nums <= " . $page * $paginate;
+        return $childSql;
+    }
+
+    public function getSearchCondition(Request $request)
+    {
+        $page = $request->input('page') ?? 1;
+        $paginate = $request->input('paginate') ?? 50;
+        $start_time = $request->input('start_time') ?? null;
+        $end_time = $request->input('end_time') ?? null;
+        $wave_num = $request->input('wave_num') ?? null;
+        $wave_status = $request->input('wave_status') ?? null;
+        return ['page' => $page, 'paginate' => $paginate, 'start_time' => $start_time, 'end_time' => $end_time, 'wave_num' => $wave_num, 'wave_status' => $wave_status,];
+    }
+
+    public function downloadExec(Request $request)
+    {
+        $childSql = "( select row_number() over (order by addTime desc ) nums,UdfPrintFlag2,WaveNo,WaveStatus,Descr,CarrierID,WaveDispatchID,addWho,addTime,WaveRule,UserDefine1,UserDefine2 from doc_wave_header where 1=1 ";
+        if ($request->input('start_time')) {
+            $childSql .= " and addTime > '" . $request->input('start_time') . " 00:00:00' ";
+        }
+        if ($request->input('end_time')) {
+            $childSql .= " and addTime < '" . $request->input('end_time') . " 23:59:59' ";
+        }
+        if ($request->input('wave_num')) {
+            $sql = $this->getWaveNoString($request->input('wave_num'));
+            $childSql .= " and WaveNo in (" .$sql . ") ";
+        }
+        if ($request->input('wave_status')) {
+            $childSql .= " and WaveStatus =  '" . $request->input('wave_status') . "' ";
+        }
+        $childSql.=' order by addTime';
+        $childSql =  $childSql . ") wave_header ";
+        $sql = ' select wave_header.WaveNo,' .
+            'wave_header.WaveStatus,' .
+            'codes.CODENAME_C,' .
+            'wave_header.Descr,' .
+            'customer.Descr_c,' .
+            'wave_header.addTime,' .
+            'wave_header.addWho,' .
+            'wave_header.WaveRule,' .
+            'wave_header.UserDefine1,' .
+            'wave_header.UserDefine2,' .
+            'wave_header.WaveDispatchID,' .
+            'wave_header.UdfPrintFlag2 from ' ;
+        $sql .= $childSql;
+        $sql .= " left join BAS_CUSTOMER  customer on  customer.CustomerID  = wave_header.CarrierID and customer.CUSTOMER_TYPE = 'CA'";
+        $sql .= " left join BAS_CODES codes on wave_header.WaveStatus = codes.CODE and codes.codeId = 'SO_STS'";
+        $data = DB::connection('oracle')->select(DB::raw($sql));
+        return $data;
+    }
+
+    public function getExcelFromHead()
+    {
+        $arr = [[
+            'waveNo' => '波次号',
+            'codename_c' => '波次状态',
+            'waveRule' => '波次规则',
+            'descr' => '波次描述',
+            'descr_c' => '承运人',
+            'addWho' => '操作员',
+            'addTime' => '创建时间',
+            'pickerPrint' => '拣货单打印人',
+            'pickerPrintTime' => '拣货单打印时间',
+            'expressPrinting' => '快递单号打印人',
+            'expressPrintTime' => '快递单号打印时间',
+        ]];
+        return $arr;
+    }
+    public  function getWaveNoString($wave_num){
+        $sqlString = '';
+        if(!$wave_num){
+            return $sqlString;
+        }
+        if(strpos($wave_num,",") ){
+
+            $arr = explode(',',$wave_num);
+            $let = count($arr);
+            for($i=0;$i<$let;$i++){
+                $arr[$i] = "'".$arr[$i]."'";
+            }
+            $sqlString = implode(",",$arr);
+            return $sqlString;
+        }
+        if($wave_num){
+            $sqlString = "'".$wave_num."'";
+        }
+        return $sqlString;
+    }
+}

+ 87 - 13
resources/views/order/wave/search.blade.php

@@ -17,8 +17,8 @@
                             导出Excel
                             导出Excel
                         </button>
                         </button>
                         <div class="dropdown-menu">
                         <div class="dropdown-menu">
-                            <a class="dropdown-item" href="javascript:">导出勾选内容</a>
-                            <a class="dropdown-item" href="javascript:">导出所有页</a>
+                            <a class="dropdown-item" @click="exportExcel('pitch')" href="javascript:">导出勾选内容</a>
+                            <a class="dropdown-item" @click="exportExcel()" href="javascript:">导出所有页</a>
                         </div>
                         </div>
 
 
                         <button type="button" class="btn btn-sm tooltipTarget btn-outline-dark" @click="batchCancelPrint">取消打印标记</button>
                         <button type="button" class="btn btn-sm tooltipTarget btn-outline-dark" @click="batchCancelPrint">取消打印标记</button>
@@ -28,7 +28,7 @@
                 <tr class="text-nowrap">
                 <tr class="text-nowrap">
                     <th>
                     <th>
                         <label for="all">
                         <label for="all">
-                            <input type="checkbox" id="all" @click="checkAll($event)"/>
+                            <input type="checkbox" id="all" @click="checkAll()"/>
                         </label>
                         </label>
                     </th>
                     </th>
                     <th>序号</th>
                     <th>序号</th>
@@ -51,7 +51,6 @@
                 <tr v-for="(wave,i) in waves">
                 <tr v-for="(wave,i) in waves">
                     <td>
                     <td>
                         <input class="checkItem" type="checkbox" :value="wave.waveNo" v-model="checkData">
                         <input class="checkItem" type="checkbox" :value="wave.waveNo" v-model="checkData">
-
                     </td>
                     </td>
                     <td>@{{ i+1 }}</td>{{--序号--}}
                     <td>@{{ i+1 }}</td>{{--序号--}}
                     <td class="text-dark font-weight-bold text-nowrap">@{{ wave.waveNo }}</td>{{--波次号--}}
                     <td class="text-dark font-weight-bold text-nowrap">@{{ wave.waveNo }}</td>{{--波次号--}}
@@ -67,13 +66,13 @@
                     <td class="text-muted">@{{ wave.expressPrintTime }}</td>{{--快递单号打时间--}}
                     <td class="text-muted">@{{ wave.expressPrintTime }}</td>{{--快递单号打时间--}}
                     @can("订单管理-波次-取消打印标记")
                     @can("订单管理-波次-取消打印标记")
                     <td class="text-center">
                     <td class="text-center">
-                        <button v-if="wave.waveStatus != '99' && wave.UdfPrintFlag2 === 'Y' " type="button" class="btn btn-sm btn-outline-dark text-nowrap" :data-value="wave.waveNo" @click="singleCancelPrint($event)">取消</button>
+                        <button v-if="wave.waveStatus !== '99' && wave.UdfPrintFlag2 === 'Y' " type="button" class="btn btn-sm btn-outline-dark text-nowrap" :data-value="wave.waveNo" @click="singleCancelPrint($event)">取消</button>
                     </td>
                     </td>
                     @endcan
                     @endcan
                 </tr>
                 </tr>
             </table>
             </table>
             <button type="button" class="btn btn-sm " @click="pervPage" :class="'{{$param['currPage']}}'> 1? 'btn-outline-info ':'disabled'" {{--disabled="'{{$param['currPage']}}'> 1?'':true"--}}>上一页</button>
             <button type="button" class="btn btn-sm " @click="pervPage" :class="'{{$param['currPage']}}'> 1? 'btn-outline-info ':'disabled'" {{--disabled="'{{$param['currPage']}}'> 1?'':true"--}}>上一页</button>
-            <button type="button" class="btn btn-sm " @click="nextPage" :class="'{{$param['currPage']}}'<'{{$param['pageTotal']}}'? 'btn-outline-info':'disabled'"  @if({{$param['currPage']}} < {{$param['pageTotal']}}) @endif>下一页</button>
+            <button type="button" class="btn btn-sm " @click="nextPage" :class="'{{$param['currPage']}}'<'{{$param['pageTotal']}}'? 'btn-outline-info':'disabled'"  :disabled="currPage == pageTotal">下一页</button>
             <input @keyup.enter="pageTurning($event)" class="form-control-sm ml-3 tooltipTarget"
             <input @keyup.enter="pageTurning($event)" class="form-control-sm ml-3 tooltipTarget"
                    :placeholder="'当前页数:'+'{{$param['currPage']}}'+'/'+'{{$param['pageTotal']}}'" title="去往指定页">
                    :placeholder="'当前页数:'+'{{$param['currPage']}}'+'/'+'{{$param['pageTotal']}}'" title="去往指定页">
             <span class="text-muted m-1">共 {{$param['count']}} 条 </span>
             <span class="text-muted m-1">共 {{$param['count']}} 条 </span>
@@ -111,11 +110,11 @@
                 ],
                 ],
                 form: '',
                 form: '',
                 checkData: [],
                 checkData: [],
-
+                pageTotal:'{{$param['pageTotal']}}',
+                currPage:'{{$param['currPage']}}',
 
 
             },
             },
             mounted: function () {
             mounted: function () {
-
                 let data = [[
                 let data = [[
                     {name: 'start_time', type: 'dataTime', tip: '选择显示指定日期的起始时间', placeholder: ''},
                     {name: 'start_time', type: 'dataTime', tip: '选择显示指定日期的起始时间', placeholder: ''},
                     {name: 'end_time', type: 'dataTime', tip: '选择显示指定日期的结束时间', placeholder: ''},
                     {name: 'end_time', type: 'dataTime', tip: '选择显示指定日期的结束时间', placeholder: ''},
@@ -137,21 +136,24 @@
                     }
                     }
                 },
                 },
                 batchCancelPrint: function () {
                 batchCancelPrint: function () {
-                    let ids = this.checkData;
-                    if (ids.length === 0) {
+                    if (this.checkData === 0) {
                         tempTip.show('没有勾选记录');
                         tempTip.show('没有勾选记录');
                         return;
                         return;
                     }
                     }
+                    let ids = this.getCheckedIds();
                     this.cancelPrint(ids);
                     this.cancelPrint(ids);
                 },
                 },
                 cancelPrint: function (ids, type = 'string') {
                 cancelPrint: function (ids, type = 'string') {
                     let _this = this;
                     let _this = this;
+                    // console.log(ids);
                     axios.post("{{url("wave/cancelPrinting")}}", {ids: ids}).then(function (res) {
                     axios.post("{{url("wave/cancelPrinting")}}", {ids: ids}).then(function (res) {
                         if (res.data.success) {
                         if (res.data.success) {
                             _this.waves.forEach(function (wave) {
                             _this.waves.forEach(function (wave) {
                                 if (ids.includes(wave.waveNo)) {
                                 if (ids.includes(wave.waveNo)) {
-                                    wave.expressPicking = '';
-                                    wave.expressPickTime = '';
+                                    console.log(wave.waveNo);
+                                    wave.expressPrinting = '';
+                                    wave.expressPrintTime = '';
+                                    wave.UdfPrintFlag2 = 'N';
                                 }
                                 }
                             })
                             })
                             tempTip.setDuration(3000);
                             tempTip.setDuration(3000);
@@ -159,6 +161,7 @@
                             if (type === 'array') {
                             if (type === 'array') {
                                 _this.checkData = [];
                                 _this.checkData = [];
                             }
                             }
+                            $(".checkItem").prop("checked",false);
                         } else {
                         } else {
                             tempTip.setDuration(2500);
                             tempTip.setDuration(2500);
                             tempTip.show('标记勾选内容取消打印失败,错误:' + response.data.fail_info);
                             tempTip.show('标记勾选内容取消打印失败,错误:' + response.data.fail_info);
@@ -167,7 +170,6 @@
                         tempTip.setDuration(4000);
                         tempTip.setDuration(4000);
                         tempTip.show('网络错误:' + err);
                         tempTip.show('网络错误:' + err);
                     });
                     });
-                    console.log(this.waves);
                 },
                 },
                 pageTurning: function (event) {
                 pageTurning: function (event) {
                     let page = $(event.target).val();
                     let page = $(event.target).val();
@@ -181,6 +183,78 @@
                 },
                 },
                 nextPage() {
                 nextPage() {
                     window.location = this.form.nextPage();
                     window.location = this.form.nextPage();
+                },
+                exportExcel(string = 'all'){
+                    // let data = this.getSearch();
+                    let search = '';
+                    if(string === "all"){
+                    }else if(string === 'pitch'){
+                        if(this.checkData){
+                            let seachs =this.checkData.map(function (value) {
+                                return "'"+value+"'";
+                            })
+                            search = "wave_num="+this.checkData.join(',');
+                        }
+                    }
+                    let url = window.location.search ;
+                    url = url.length< 2 ? '' : url.substring(1);
+                    console.log(search,url);
+                    window.open("{{url('wave/exportExcel?')}}"+search+url);
+                    // todo
+                   /* let instance = axios.create({
+                        {{--url:'{{url("wave/exportExcel")}}',--}}
+                        responseType:'blob',
+                        data:data,
+                    });
+                    instance.post().then(function(res){
+                        let blob =  res.data;
+                        let url = URL.createObjectURL(blob);
+                        let fileName = new Date().toLocaleDateString() + "--波次记录.xml";
+                        let a = document.createElement('a');
+                        $("body").append($(a).attr("href",url).attr("download",fileName)) ;
+                        a.click();
+                        a.remove()
+                    }).catch(function(err){
+                        console.log("err",err);
+                    });*/
+                },
+                getSearch(){
+                    let search = window.location.search,data = {};
+                    if(!search || search.length <=1 ){
+                        return {};
+                    }
+                    let index =search.indexOf("?");
+                    search = (search.substr(index)).split('&');
+
+                    search.forEach(function(map){
+                        let arr = map.split('=');
+                        let key = arr[0],value = arr[2];
+                        if(value.include(',')){
+                            value = value.split(',');
+                        }
+                        data[key] = value;
+                    });
+                    return data;
+                },
+                checkAll(){
+                    let checked = $("#all").is(":checked");
+                    $(".checkItem").prop("checked",checked === true);
+                    if(checked){
+                        this.checkData = this.getCheckedIds();
+                    }else{
+                        this.checkData = [];
+                    }
+                },
+
+                getCheckedIds(){
+                    // HACK
+                    let values = [];
+                    let items = $(".checkItem:checked");
+                    let len = items.length,index =0;
+                    for (index =0;index <len;index++ ){
+                        values.push($(items[index]).val());
+                    }
+                    return values;
                 }
                 }
             }
             }
         });
         });

+ 2 - 0
routes/web.php

@@ -314,4 +314,6 @@ Route::group(['prefix'=>'wave'],function(){
     Route::get('index','WaveController@index');
     Route::get('index','WaveController@index');
     // cancel printing by id or ids
     // cancel printing by id or ids
     Route::post('cancelPrinting','WaveController@cancelPrinting');
     Route::post('cancelPrinting','WaveController@cancelPrinting');
+    // export Excel
+    Route::any('exportExcel','WaveController@exportExcelOnParams');
 });
 });