Ver Fonte

Merge branch 'zengjun' of ssh://was.baoshi56.com:10022/var/git/bswas

LD há 5 anos atrás
pai
commit
9a569b0fa6

+ 47 - 24
app/Console/Commands/SyncWMSOrderTask.php

@@ -2,6 +2,7 @@
 
 namespace App\Console\Commands;
 
+use App\OracleDOCOrderHeader;
 use App\Services\OracleDOCOrderHeaderService;
 use App\Services\OrderService;
 use App\ValueStore;
@@ -70,24 +71,36 @@ class SyncWMSOrderTask extends Command
     public function syncCreatedOrder()
     {
         /**
-         * @var OrderService $orderService
+         * @var OracleDocOrderHeaderService  $oracleDOCOrderHeaderService
          */
+        $oracleDOCOrderHeaderService = app('OracleDocOrderHeaderService');
+
         $newest_key         = config('sync.order_sync.cache_prefix.created_at');
         $newest_list_key    = config('sync.order_sync.cache_prefix.newest_list');
         $hasKey         = config('sync.order_sync.cache_prefix.newest_has');
         $prefixKey      = config('sync.order_sync.cache_prefix.newest');
-        ini_set('memory_limit', '512M');
-         $last_date = $this->service->getOrderSyncAt($newest_key,'newest');                             // 获取创建时间点
-        $orderHeaders =  app('OracleDocOrderHeaderService')->getWMSOrderOnStartDate($last_date);               // WMS订单
+        ini_set('memory_limit', '1024M');
+        $last_date = $this->service->getOrderSyncAt($newest_key,'newest');                             // 获取创建时间点
+
+        $orderHeaders = OracleDOCOrderHeader::query()
+            ->selectRaw(implode(',',OracleDOCOrderHeaderService::$columns))
+            ->whereColumn('DOC_Order_Header.editTime','=','DOC_Order_Header.addTime')
+            ->where('addTime','>=',$last_date)
+            ->orderByDesc('DOC_Order_Header.addTime')->get();
+
         if($orderHeaders->count()==0)return;
-        $last_order = $orderHeaders->first();                                                               // 时间点靠后的
-        $newest_orders = $orderHeaders->where('addtime',$last_order->addtime);
-        $orderHeaders = $this->service->filterOrderByCache($orderHeaders,$newest_list_key);                  // 对比缓存
-        if(count($newest_orders)>0 && count($orderHeaders) >0){
-            $this->service->syncOrder($orderHeaders);                                                    //  同步订单
-            $this->service->cancelOrderCache($newest_list_key,$prefixKey);                                   //  清除缓存
-            $this->service->pushOrderCache($newest_orders,$prefixKey,$hasKey,$newest_list_key);              //  添加缓存
-            $this->service->setOrderSyncAt($newest_key,$last_order->addtime,count($orderHeaders)>0);   //  更新时间
+        $orderHeaderList = $orderHeaders->chunk(2000);
+        foreach ($orderHeaderList as $item) {
+            $item = $oracleDOCOrderHeaderService->loadMissing($item);
+            $last_order = $item->first();                                                               // 时间点靠后的
+            $newest_orders = $item->where('addtime',$last_order->addtime);
+            $orderHeaders = $this->service->filterOrderByCache($item,$newest_list_key);                  // 对比缓存
+            if(count($newest_orders)>0 && count($orderHeaders) >0){
+                $this->service->syncOrder($orderHeaders);                                                    //  同步订单
+                $this->service->cancelOrderCache($newest_list_key,$prefixKey);                                   //  清除缓存
+                $this->service->pushOrderCache($newest_orders,$prefixKey,$hasKey,$newest_list_key);              //  添加缓存
+                $this->service->setOrderSyncAt($newest_key,$last_order->addtime,count($orderHeaders)>0);   //  更新时间
+            }
         }
         unset($orderHeaders,$newest_orders,$last_order);
     }
@@ -96,26 +109,36 @@ class SyncWMSOrderTask extends Command
     {
         /**
          * @var OracleDOCOrderHeaderService $oracleDOCOrderHeaderService
-         * @var OrderService $orderService
          */
+        $oracleDOCOrderHeaderService = app('OracleDocOrderHeaderService');
         $renewal_key        = config('sync.order_sync.cache_prefix.updated_at');
         $renewal_list_key   = config('sync.order_sync.cache_prefix.renewal_list');
         $hasKey         = config('sync.order_sync.cache_prefix.renewal_has');
         $prefixKey      = config('sync.order_sync.cache_prefix.renewal');
-        ini_set('memory_limit', '512M');
-
+        ini_set('memory_limit', '1024M');
         $last_date = $this->service->getOrderSyncAt($renewal_key,'renewal');                               // 获取更新时间点
-        $orderHeaders = app('OracleDocOrderHeaderService')->getWMSOrderOnEditDate($last_date);      // WMS订单
+
+        $orderHeaders = OracleDOCOrderHeader::query()->where('addTime',">=",$last_date)
+            ->selectRaw(implode(',',OracleDOCOrderHeaderService::$columns))
+            ->whereColumn('editTime','!=','addTime')
+            ->orderByDesc('editTime')
+            ->get();
 
         if($orderHeaders->count()==0)return;
-        $renewal_order = $orderHeaders->first();                                                            // 时间点靠后的
-        $renewal_orders =  $orderHeaders->where('edittime',$renewal_order->edittime);
-        $orderHeaders = $this->service->filterOrderByCache($orderHeaders,$renewal_list_key);                     // 对比缓存
-        if(count($renewal_orders)>0 && count($orderHeaders)>0){
-            $this->service->syncOrder($orderHeaders);                                                    // 同步订单
-            $this->service->cancelOrderCache($renewal_list_key,$prefixKey);                                      // 清除缓存
-            $this->service->pushOrderCache($renewal_orders,$prefixKey,$hasKey,$renewal_list_key);                // 添加缓存
-            $this->service->setOrderSyncAt($renewal_key,$renewal_order->edittime,count($orderHeaders)>0);   // 更新时间
+
+
+        $orderHeaderList = $orderHeaders->chunk(2000);
+        foreach ($orderHeaderList as $item) {
+            $item  = $oracleDOCOrderHeaderService->loadMissing($item);
+            $renewal_order = $item->first();                                                            // 时间点靠后的
+            $renewal_orders =  $item->where('edittime',$renewal_order->edittime);
+            $orderHeaders = $this->service->filterOrderByCache($orderHeaders,$renewal_list_key);                     // 对比缓存
+            if(count($renewal_orders)>0 && count($orderHeaders)>0){
+                $this->service->syncOrder($item);                                                    // 同步订单
+                $this->service->cancelOrderCache($renewal_list_key,$prefixKey);                                      // 清除缓存
+                $this->service->pushOrderCache($renewal_orders,$prefixKey,$hasKey,$renewal_list_key);                // 添加缓存
+                $this->service->setOrderSyncAt($renewal_key,$renewal_order->edittime,count($orderHeaders)>0);   // 更新时间
+            }
         }
         unset($orderHeaders,$renewal_orders,$renewal_order);
     }

+ 7 - 7
app/Http/Controllers/OrderIssueController.php

@@ -171,13 +171,13 @@ class OrderIssueController extends Controller
         if (!$request->input('orderNos')) {
             return ['success' => false, 'fail_info' => '没有传入的订单编号'];
         }
-        /** @var OrderIssueService $orderIssueService */
-        $orderIssueService = app(OrderIssueService::class);
-        $exits_orderNos = $orderIssueService->校验问题件是否存在_WMS订单号_返回存在的订单号($request->input('orderNos'));
-        if(count($exits_orderNos)>0){
-            return ['success'=>false,'fail_info'=>'标记问题件存在已有订单号','exitsOrderNos' =>$exits_orderNos];
-        }
-        return $orderIssueService->orderIssueTag($request->all());
+        /** @var OrderIssueService $service */
+        $service = app(OrderIssueService::class);
+        $exits_orderNos = $service->校验问题件是否存在_WMS订单号_返回存在的订单号($request->input('orderNos'));
+        if(count($exits_orderNos)>0) return ['success'=>false,'fail_info'=>'标记问题件存在已有订单号','exitsOrderNos' =>$exits_orderNos];
+        $soft_delete_order_nos = $service->checkOrderIssueIsExistAndSoftDelete($request['orderNos']);
+        if(count($soft_delete_order_nos)>0) return ['success'=>false,'fail_info'=>'订单对应问题件存在回收站,如需要请从回收站恢复','exitsOrderNos' =>$soft_delete_order_nos];
+        return $service->orderIssueTag($request->all());
     }
 
     public function apiDestroy(Request $request)

+ 10 - 1
app/Services/OrderIssueService.php

@@ -223,7 +223,7 @@ class OrderIssueService
 
     public function isExistOrderIssueTypeIsEnd($ids): bool
     {
-        return OrderIssue::query()->whereIn('id', $ids)->where('final_status', '已解决')->count() > 0;
+        return OrderIssueProcessLog::query()->whereIn('order_issue_id',$ids)->where('type','结束')->exists();
     }
 
     public function editOrderIssueSecondClientNo($id, $secondClientNo, &$order = null): bool
@@ -297,6 +297,15 @@ class OrderIssueService
         return array_intersect($exits_logistic_number, $orderNos);
     }
 
+    public function checkOrderIssueIsExistAndSoftDelete($orderNos): array
+    {
+        $orderIssues = OrderIssue::query()->onlyTrashed()->whereIn('order_id',function($query)use($orderNos){
+            $query->from('orders')->selectRaw('id')->whereIn('code',$orderNos);
+        })->get();
+        $exits_logistic_number = array_diff(array_unique(data_get($orderIssues, '*.order.code')), ['', null]);
+        return array_intersect($exits_logistic_number, $orderNos);
+    }
+
     /**
      * 导入处理字段
      * @param array $ids

+ 7 - 6
resources/views/order/index/delivering.blade.php

@@ -663,19 +663,20 @@
                     tempTip.waitingTip('处理中,请稍候');
                     let data = {orderNos:this.checkData,typeId: this.typeId,result_explain:this.result_explain};
                     axios.post("{{url('apiLocal/order/issue/orderIssueTag')}}",data).then(function(res){
-                        tempTip.setDuration(5000)
+                        tempTip.setDuration(5000);
                         tempTip.cancelWaitingTip();
                         if(res.data.success){
-                            tempTip.setDuration(3000)
-                            tempTip.showSuccess('已标记为问题件')
+                            tempTip.setDuration(3000);
+                            tempTip.showSuccess('已标记为问题件');
                             _this.checkData.forEach(function(orderNo){
                                 _this.orderIssueNos.push(orderNo)
-                            })
+                            });
                             _this.checkData = []
                         }else{
+                            console.log(res.data);
                             if(res.data.exitsOrderNos){
-                                _this.message.checkOrderIssueMessage = res.data.fail_info+res.data.exitsOrderNos
-                                $("#checkModal").modal('show')
+                                _this.message.checkOrderIssueMessage = res.data.fail_info+res.data.exitsOrderNos;
+                                $("#checkModal").modal('show');
                             }else{
                                 tempTip.setDuration(3000);
                                 tempTip.show(res.data.fail_info);