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

Merge branch 'Haozi'

# Conflicts:
#	app/Http/Controllers/TestController.php
zhouzhendong 4 лет назад
Родитель
Сommit
4e4026cd70

+ 16 - 1
app/Http/Controllers/HandInStorageController.php

@@ -135,7 +135,6 @@ class HandInStorageController extends Controller
         $this->gate("入库管理-手持入库-上架");
         $barCode=$request->input('barCode');
         $trackNumber=$request->input('trackNumber');
-        if(!$barCode)$this->error('条码不能为空');
         /** @var HandInStorageService $handInStorageService  */
         $handInStorageService=app('HandInStorageService');
         $tasks=$handInStorageService->getTsk($trackNumber,$barCode);
@@ -151,6 +150,22 @@ class HandInStorageController extends Controller
         else $this->error("该商品暂无上架任务");
     }
 
+    /**
+     * @param Request $request
+     * 根据customerid,asnno,跟踪号 或空扫 获取待上架任务
+     */
+    public function getPaTaskByTraceInOrCustomerOrAsnOrNull(Request $request)
+    {
+        $this->gate("入库管理-手持入库-上架");
+        $trackNumber=$request->input('trackNumber');
+        $barCode=$request->input('barCode');
+        /** @var HandInStorageService $handInStorageService  */
+        $handInStorageService=app('HandInStorageService');
+        $tasks=$handInStorageService->getTsk($trackNumber,$barCode);
+        if (count($tasks)>0)$this->success($tasks);
+        else $this->error('暂无上架任务');
+    }
+
     /**
      * @throws \Throwable
      * 上架

+ 5 - 7
app/Jobs/LogisticAliJiSuSync.php

@@ -36,7 +36,7 @@ class LogisticAliJiSuSync implements ShouldQueue
      */
     public function __construct($logistic_number)
     {
-        $this->logistic_number=$logistic_number;
+        $this->logistic_number = $logistic_number;
     }
 
     /**
@@ -51,13 +51,11 @@ class LogisticAliJiSuSync implements ShouldQueue
         OrderPackage::query()->where('logistic_number', $this->logistic_number)->update(['sync_routes_flag'=> true]);
 
         $this->logisticAliJiSuApiService = app('LogisticAliJiSuApiService');
+        $response = $this->logisticAliJiSuApiService->query($this->logistic_number);
+        $format = $this->logisticAliJiSuApiService->format($response,$this->logistic_number);
         try {
-            $response = $this->logisticAliJiSuApiService->query($this->logistic_number);
-            if ($response && $response->status==0){
-                $format = $this->logisticAliJiSuApiService->format($response);
-                $this->orderPackageReceivedSyncService = app('OrderPackageReceivedSyncService');
-                if (count($format)>0 && $format['logistic_number']??false) $this->orderPackageReceivedSyncService->update([$format]);
-            }
+            $this->orderPackageReceivedSyncService = app('OrderPackageReceivedSyncService');
+            if (count($format) > 0 && $format['logistic_number'] ?? false) $this->orderPackageReceivedSyncService->update([$format]);
         } catch (\Exception $e) {
             app('LogService')->log(__METHOD__, __FUNCTION__, "阿里极速数据同步快递数据 ERROR " . ' || ' . json_encode($this->logistic_number) . ' || ' . json_encode($e->getMessage()) . ' || ' . json_encode($e->getTraceAsString()));
         }

+ 34 - 21
app/Services/HandInStorageService.php

@@ -337,19 +337,23 @@ sql;
      * @return array|int
      * 根据商品条码  获取完全收货状态  部分收货状态的 PA任务
      */
-    public function getTsk($trackNumber, string $barCode): array
+    public function getTsk($trackNumber,$barCode): array
     {
         $sql = <<<sql
-SELECT TSK_TASKLISTS.CustomerID,TSK_TASKLISTS.DOCNO,TSK_TASKLISTS.Sku,TSK_TASKLISTS.PlanToLotNum,TSK_TASKLISTS.PlanToID,DOC_ASN_DETAILS.SKUDESCRC,sum(TSK_TASKLISTS.PlanToQty) AS QTY
-FROM DOC_ASN_DETAILS
-         LEFT JOIN TSK_TASKLISTS ON DOC_ASN_DETAILS.ASNNO = TSK_TASKLISTS.DOCNO AND
-                                    DOC_ASN_DETAILS.ASNLINENO = TSK_TASKLISTS.DOCLINENO
-WHERE
-      ASNNO in (SELECT asnno FROM DOC_ASN_DETAILS
-                                      LEFT JOIN BAS_SKU ON DOC_ASN_DETAILS.CUSTOMERID = BAS_SKU.CUSTOMERID AND DOC_ASN_DETAILS.SKU = BAS_SKU.SKU
-                WHERE LINESTATUS in ('30','40') and (ALTERNATE_SKU1 = ? OR ALTERNATE_SKU2 = ?  OR ALTERNATE_SKU3 = ?))
-  AND TSK_TASKLISTS.TASKPROCESS = '00'
-  AND TSK_TASKLISTS.TASKTYPE = 'PA'
+select t.*, DOC_ASN_DETAILS.RECEIVEDQTY
+from (select TSK_TASKLISTS.CustomerID,
+             TSK_TASKLISTS.DOCNO,
+             TSK_TASKLISTS.Sku,
+             TSK_TASKLISTS.PlanToLotNum,
+             TSK_TASKLISTS.PlanToID,
+             DOC_ASN_DETAILS.SKUDESCRC,
+             TSK_TASKLISTS.DOCLINENO,
+             sum(TSK_TASKLISTS.PlanToQty) as qty
+      from TSK_TASKLISTS
+               LEFT JOIN DOC_ASN_DETAILS ON DOC_ASN_DETAILS.ASNNO = TSK_TASKLISTS.DOCNO AND
+                                            DOC_ASN_DETAILS.ASNLINENO = TSK_TASKLISTS.DOCLINENO
+      where TSK_TASKLISTS.TASKTYPE = 'PA'
+        AND TSK_TASKLISTS.TASKPROCESS = '00'
 sql;
         if (!$trackNumber){ //没有输入条件  空扫
             $owner_codes = app('OwnerService')->getIntersectPermitting(['code']);
@@ -364,23 +368,32 @@ sql;
                 }
                 $sql.=')';
             }else{
-                $sql .= 'AND TSK_TASKLISTS.CustomerID IS NULL ';
+                $sql .= ' AND TSK_TASKLISTS.CustomerID IS NULL ';
             }
 
         }else{
-            if (strpos(strtoupper($trackNumber), 'ASN') !== false) $sql.='AND TSK_TASKLISTS.DOCNO= ?'; //输入条件为asn单号
-            if ($this->checkUserOwnerAuth($trackNumber)){ //输入条件为货主
-                $sql.='AND TSK_TASKLISTS.CustomerID= ?';
-            }else{
-                $sql.='AND TSK_TASKLISTS.PlanToID= ?';  //不是货主 判断是否为跟踪号
+            if (strpos(strtoupper($trackNumber), 'ASN') !== false){
+                $sql.='AND TSK_TASKLISTS.DOCNO= ?'; //输入条件为asn单号
+            } else{ //不为asn号时 判断是否为货主
+                if ($this->checkUserOwnerAuth($trackNumber)){ //输入条件为货主
+                    $sql.=' AND TSK_TASKLISTS.CustomerID= ?';
+                }else{
+                    $sql.=' AND TSK_TASKLISTS.PlanToID= ?';  //不是货主 判断是否为跟踪号
+                }
             }
         }
 
-        $sql.=' group by TSK_TASKLISTS.CustomerID,TSK_TASKLISTS.DOCNO,TSK_TASKLISTS.Sku,TSK_TASKLISTS.PlanToLotNum,TSK_TASKLISTS.PlanToID,DOC_ASN_DETAILS.SKUDESCRC';
+        if ($barCode)$sql.=" AND TSK_TASKLISTS.sku in (select SKU from BAS_SKU where ALTERNATE_SKU1='".$barCode."' union
+                                  select SKU from BAS_SKU where ALTERNATE_SKU2='".$barCode."' union
+                                  select SKU from BAS_SKU where ALTERNATE_SKU3='".$barCode."' )";
+
+        $sql.=' group by TSK_TASKLISTS.CustomerID, TSK_TASKLISTS.DOCNO, TSK_TASKLISTS.Sku, TSK_TASKLISTS.PlanToLotNum,
+               TSK_TASKLISTS.PlanToID, DOC_ASN_DETAILS.SKUDESCRC, TSK_TASKLISTS.DOCLINENO) t
+         left join DOC_ASN_DETAILS on t.DOCLINENO = DOC_ASN_DETAILS.ASNLINENO and t.DOCNO = DOC_ASN_DETAILS.ASNNO';
         if ($trackNumber){
-            if ($this->checkUserOwnerAuth($trackNumber))$tasks = DB::connection("oracle")->select(DB::raw($sql), [$barCode, $barCode, $barCode, strtoupper($trackNumber)]);
-            else $tasks = DB::connection("oracle")->select(DB::raw($sql), [$barCode, $barCode, $barCode, $trackNumber]);
-        }else {$tasks = DB::connection("oracle")->select(DB::raw($sql), [$barCode, $barCode, $barCode]);}
+            if ($this->checkUserOwnerAuth($trackNumber))$tasks = DB::connection("oracle")->select(DB::raw($sql), [strtoupper($trackNumber)]);
+            else $tasks = DB::connection("oracle")->select(DB::raw($sql), [$trackNumber]);
+        }else {$tasks = DB::connection("oracle")->select(DB::raw($sql));}
         if (!$tasks) return [];
         else return $tasks;
     }

+ 8 - 2
app/Services/LogisticAliJiSuApiService.php

@@ -40,10 +40,16 @@ class LogisticAliJiSuApiService
         return json_decode(curl_exec($curl));
     }
 
-    public function format($response): array
+    public function format($response,$logistic_number): array
     {
         $result = [];
-        if (!isset($response)) {return [];}
+        if (!isset($response)||($response && $response->status!=0)) {
+            return [
+                'logistic_number' => $logistic_number,
+                'exception_type' => '揽件异常',
+                'exception' => '是',
+            ];
+        }
         else {
             try {
                 if ($response->result->number??false)$result['logistic_number'] = $response->result->number;

+ 1 - 1
app/Services/OrderPackageReceivedSyncService.php

@@ -92,7 +92,7 @@ class OrderPackageReceivedSyncService
             ->select(['logistic_number', 'order_id','id'])
             ->whereIn('order_id',function ($query){
                 $query->from('orders')->selectRaw('id')->whereIn('logistic_id',function ($builder){
-                    $builder->from('logistics')->selectRaw('id')->where('type','!=','物流')->whereNotIn('belong_company',['顺丰','中通','韵达','圆通','京东']);
+                    $builder->from('logistics')->selectRaw('id')->where('type','=','快递')->whereNotIn('belong_company',['顺丰','中通','韵达','圆通','京东']);
                 });
             });
         $query = $query->where('sent_at', '>=', now()->subDays(config('api_logistic.querying_days')))

+ 60 - 13
resources/views/store/handInStorage/putaway.blade.php

@@ -7,7 +7,7 @@
             <div class="card-header text-center mt-2 bg-transparent" id="header_title">
                 <span class="font-weight-bold h4">上架</span>
             </div>
-            <div class="card-body">
+            <div class="card">
                 <div class="form-group row m-1">
                         <span class="text-right">
                             <label for="trackNumber" class="text-right font-weight-bold">容器号:</label>
@@ -19,6 +19,7 @@
                     <span class="invalid-feedback offset-3" role="alert" v-if="errors.trackNumber">
                             <strong>@{{ errors.trackNumber[0] }}</strong>
                     </span>
+                    <span class="btn btn-sm btn-info" @click="getPaTaskByTraceInOrCustomerOrAsnOrNull()">搜索</span>
                 </div>
                 <div class="form-group row m-1">
                         <span class="text-right">
@@ -26,7 +27,7 @@
                         </span>
                     <input type="text" class="form-control form-control-sm col-8" id="barCode" autocomplete="off"
                            :class="errors.barCode ? 'is-invalid' : ''" @keydown.enter="enterVal($event)"
-                           v-model="info.barCode" @blur="getTsk()">
+                           v-model="info.barCode" @blur="getTsk()" >
                     <span class="invalid-feedback offset-3" role="alert" v-if="errors.barCode">
                             <strong>@{{ errors.barCode[0] }}</strong>
                     </span>
@@ -60,33 +61,32 @@
                         </div>
                     </div>
                 </div>
-                <div style="overflow: auto;overflow-x: hidden" id="cardTable" v-if="tasks.length>0">
+                <div style="overflow: auto;overflow-x: hidden" id="cardTable" v-show="tasks.length>0 && !info.barCode">
                     <table class="table-sm table-striped table-bordered table-hover mb-3"
                            style="background: rgb(255, 255, 255);">
                         <tr v-for="(task,i) in tasks">
                             <td style="filter:grayscale(30%);">
                                 <div>
                                     <div style="transform:scale(1)" class="pl-0">
+                                        <span><span class="text-black">ASN:</span><span class="text-black font-weight-bold">@{{ task.docno }}</span></span>
                                         <span><span class="text-black">货主:</span><span
                                                 class="text-black font-weight-bold">@{{ task.customerid }}</span></span>
-                                        <span><span class="text-black">批次:</span><span
-                                                class="text-danger">@{{ task.plantolotnum }}</span></span>
-                                        <span class="text-right float-right">选中:<input type="checkbox" :id="'task_'+i"
+                                        <span>&nbsp;&nbsp;&nbsp;&nbsp;</span>
+                                        <span><span class="text-black">sku:</span><span
+                                                class="text-black">@{{ task.sku }}</span></span>
+                                        <span class="text-right float-right" v-show="info.barCode">选中:<input type="checkbox" :id="'task_'+i"
                                                                                        @click="checked($event,task)"></span>
-                                        <br>
+                                        <span><span class="text-lowercase">待上架/总量:</span><span
+                                                class="text-lowercase text-info font-weight-bold">@{{ task.qty}}/@{{ task.receivedqty }}</span></span>
                                         <span><span>容器号:</span><span class="">@{{ task.plantoid }} </span></span>
-                                        <span><span class="text-lowercase">数量:</span><span
-                                                class="text-lowercase">@{{ task.qty }} </span></span>
-                                        <span>&nbsp;&nbsp;&nbsp;&nbsp;</span>
-                                        <span><span class="text-black">商品名:</span><span class="text-black">@{{ task.skudescrc }}</span></span>
-                                        <span><span class="text-black">ASN:</span><span class="text-black font-weight-bold">@{{ task.docno }}</span></span>
                                     </div>
                                 </div>
                             </td>
                         </tr>
                     </table>
                 </div>
-                <div style="overflow: auto;overflow-x: hidden" id="cardTable" class="bg-secondary" v-if="invLots.length>0">
+
+                <div style="overflow: auto;overflow-x: hidden" class="bg-secondary" v-if="invLots.length>0">
                     <span class="font-weight-bold ml-1 text-white">库存余量</span>
                     <table class="table-sm table-striped table-bordered table-hover mb-3"
                            style="background: rgb(255, 255, 255);">
@@ -159,6 +159,13 @@
                             if (e1) e1.remove();
                             if (e2) e2.remove();
                         },
+                        clearData(){
+                          this.info.name='';
+                          this.tasks=[];
+                          this.invLots=[];
+                          this.checkData=[];
+                          this.$forceUpdate();
+                        },
                         checked(e, task, element = undefined) {
                             if (!element)element = e.target;
                             let _this = this;
@@ -204,10 +211,40 @@
                             this.info.paTotal-=Number(task.qty);
                             // this.info.location=task.plantolocation;
                         },
+                        getPaTaskByTraceInOrCustomerOrAsnOrNull() {
+                            let _this=this;
+                            _this.clearData();
+                            let url = '{{url('store/handInStorage/getPaTaskByTraceInOrCustomerOrAsnOrNull')}}';
+                            window.axios.post(url, {trackNumber:this.info.trackNumber,barCode:null})
+                                .then(res => {
+                                    if (res.data.success) {
+                                        this.tasks = res.data.data;
+                                        this.$forceUpdate();
+                                        setTimeout(function (){
+                                            this.height=window.screen.availHeight;
+                                            document.getElementById('cardTable').style.height=this.height*0.35+'px';
+                                        },10)
+                                        return;
+                                    }
+                                    this.tasks=[];
+                                    window.tempTip.setDuration(3000);
+                                    window.tempTip.show(res.data.data);
+                                }).catch(err => {
+                                this.tasks=[];
+                                window.tempTip.setDuration(3000);
+                                window.tempTip.show("网络错误:" + err);
+                            })
+                        },
                         getTsk() {
                             let _this=this;
                             _this.clearChecked();
+                            _this.clearData();
                             if (!this.info.barCode)return;
+                            if (!this.info.trackNumber){
+                                window.tempTip.setDuration(3000);
+                                window.tempTip.show('容器号必填');
+                                return;
+                            }
                             let url = '{{url('store/handInStorage/getTsk')}}';
                             window.axios.post(url, {trackNumber:this.info.trackNumber,barCode: this.info.barCode})
                                 .then(res => {
@@ -220,6 +257,16 @@
                                             let element={};
                                             element.checked=true;
                                             _this.checked(1,_this.tasks[0],element)
+                                            _this.tasks.forEach(function (task,i){
+                                                if (i==0)return;
+                                                if (task.customerid == _this.tasks[0].customerid
+                                                    && task.plantolotnum == _this.tasks[0].plantolotnum
+                                                    && task.sku == _this.tasks[0].sku)
+                                                    document.getElementById("task_"+i).checked=true;
+                                                    _this.checked(1,_this.tasks[i],element);
+                                            })
+                                            // document.getElementById('cardTable').remove();
+                                            document.getElementById('cardTable').style.height=null;
                                         }, 100);
                                         return;
                                     }

+ 1 - 0
routes/web.php

@@ -503,6 +503,7 @@ Route::group(['middleware'=>'auth'],function ($route){
             Route::post('getBasSkuWithLot','HandInStorageController@getBasSkuWithLot');
             Route::any('fluxHandIn','HandInStorageController@fluxHandIn');
             Route::post('getTsk','HandInStorageController@getTsk');
+            Route::post('getPaTaskByTraceInOrCustomerOrAsnOrNull','HandInStorageController@getPaTaskByTraceInOrCustomerOrAsnOrNull');
             Route::post('handFluxPa','HandInStorageController@handFluxPa');
             Route::get('receiveDetailPage/{asnno}/{customerid}','HandInStorageController@receiveDetailPage');
         });

+ 5 - 6
tests/Services/LogisticAliJiSuApiService/FormatTest.php

@@ -30,11 +30,10 @@ class FormatTest extends TestCase
      */
     public function format_test()
     {
-//        $response=$this->service->query('JDVB09966674081');
-//        if ($response && $response->status==0){
-//            $result = $this->service->format($response);
-//            $this->assertNotEmpty($result);
-//        }
-            $this->assertTrue(true);
+//        $response = $this->service->query('9830318696194');
+//        $result = $this->service->format($response, '9830318696194');
+//        dd($result);
+//      $this->assertNotEmpty($result);
+        $this->assertTrue(true);
     }
 }

+ 3 - 2
tests/Services/LogisticAliJiSuApiService/QueryTest.php

@@ -4,6 +4,7 @@
 namespace Tests\Services\LogisticAliJiSuApiService;
 
 use App\OrderPackage;
+use App\Services\LogisticAliJiSuApiService;
 use App\Services\LogisticYDService;
 use App\Services\LogisticYTOService;
 use Doctrine\DBAL\Exception;
@@ -13,7 +14,7 @@ use Tests\TestCase;
 class QueryTest extends TestCase
 {
     /**
-     * @var LogisticYTOService $service
+     * @var LogisticAliJiSuApiService $service
      */
     private $service;
 
@@ -29,7 +30,7 @@ class QueryTest extends TestCase
      */
     public function prod_test()
     {
-//       $response = $this->service->query('KYE700000006097');
+//       $response = $this->service->query('9883840347518');
 //       dd($response);
 //       if ($response->status==0){
 //           $this->assertNotEmpty($response->result);