ajun 5 vuotta sitten
vanhempi
commit
2386ba4ef5
2 muutettua tiedostoa jossa 99 lisäystä ja 1 poistoa
  1. 13 0
      app/Http/Controllers/TestController.php
  2. 86 1
      app/Services/OrderService.php

+ 13 - 0
app/Http/Controllers/TestController.php

@@ -1130,6 +1130,7 @@ where (commodities.owner_id,commodity_barcodes.code) in (select commodities.owne
 
     public function testSyncOrderTask()
     {
+        Cache::flush();
         dump('hendle...');
         dump((string)Carbon::now());
         dump(memory_get_usage() / 1024 / 1024);
@@ -1542,6 +1543,18 @@ where (commodities.owner_id,commodity_barcodes.code) in (select commodities.owne
             });
     }
 
+    public function testCarbon()
+    {
+        $month_begin = date('Y-m-01 00:00:00');
+        dump($month_begin);
+        dd(Carbon::parse($month_begin)->isAfter(Carbon::parse('2020-12-01 00:00:00')));
+    }
 
+    public function testGet()
+    {
+        $service = new OrderService();
+        $count = $service->getCurrentFinishedOrders_byOwnerId(7);
+        dd($count);
+    }
 
 }

+ 86 - 1
app/Services/OrderService.php

@@ -656,8 +656,9 @@ class OrderService
 
         unset($owners,$logistics,$shops,$warehouses,$batches);
         // 转换插入 3s
+        $this->pushOrderCreatedCountCache($created_params);
         if(count($created_params) > 0){
-            collect($created_params)->chunk(3500)->each(function($inner_params){
+            collect($created_params)->chunk(3000)->each(function($inner_params){
                 $arr = $inner_params->toArray();
                 $this->insert($arr);
                 dispatch(new OrderFreeze($arr));
@@ -672,6 +673,7 @@ class OrderService
         });
         unset($update_order);
         if(count($update_params)==0)return;
+        $this->pushOrderUpdatedCountCache($orders,$update_params);
         $this->batchUpdate($update_params);
         dispatch(new OrderFreeze($update_params));
         unset($update_params);
@@ -1079,4 +1081,87 @@ class OrderService
        return false;
     }
 
+    public function pushOrderUpdatedCountCache($orders,$update_params)
+    {
+        /**
+         * @var DataHandlerService $dataHandlerService
+         * @var OwnerService $ownerService
+         */
+        if(!$orders||!$update_params)return;
+        $dataHandlerService  = app('DataHandlerService');
+        $order_map = $dataHandlerService->dataHeader(['code'],$orders);
+        $owner_map = [];
+        $month_begin = Carbon::parse(date(date('Y-m-01 00:00:00')));
+        foreach ($update_params as $key=>$params) {
+            if(!($params['code'] ?? false))continue;
+            if($params['wms_status'] !== '订单完成')continue;
+            $order = $dataHandlerService->getKeyValue(['code' => $params['code']],$order_map);
+            if(!$order || $order['wms_status'] === '订单完成')continue;
+            if($month_begin->isAfter(Carbon::parse($order['wms_edittime'])))continue;
+            $owner_id = $params['owner_id'];
+            if(!array_key_exists($owner_id,$owner_map))$owner_map[$owner_id] = 0;
+            $owner_map[$owner_id]+=1;
+        }
+        $cancelCount = [];
+        foreach ($update_params as $key=>$params) {
+            if($key==1||!($params['code'] ?? false))continue;
+            if($params['wms_status'] == '订单完成' || $params['wms_status'] !== '订单取消')continue;
+            $order = $dataHandlerService->getKeyValue(['code' => $params['code']],$order_map);
+            if($month_begin->isAfter(Carbon::parse($order['wms_edittime'])))continue;
+            if(!$order || $order['wms_status'] == '订单完成') continue;
+            $owner_id = $params['owner_id'];
+            if(!array_key_exists($owner_id,$cancelCount))$cancelCount[$owner_id] = 0;
+            $cancelCount[$owner_id]+=1;
+        }
+        foreach ($owner_map as $key => $value) {
+            if($value==0)continue;
+            $cancelCount  = $cancelCount[$key] ?? 0;
+            $this->setCurrentFinishedOrders_byOwnerId($key,$value,$cancelCount);
+        }
+    }
+
+    public function pushOrderCreatedCountCache($created_params)
+    {
+        /**
+         * @var OwnerService $ownerService
+         */
+        if(!$created_params)return;
+        $owner_map = [];
+        $month_begin = Carbon::parse(date(date('Y-m-01 00:00:00')));
+        foreach ($created_params as $params) {
+            if($params['wms_status'] != '订单完成')continue;
+            if($month_begin->isAfter(Carbon::parse($params['created_at'])))continue;
+            $owner_id = $params['owner_id'] ?? false;
+            if(!$owner_id)continue;
+            if(!array_key_exists($owner_id,$owner_map))$owner_map[$owner_id] = 0;
+            $owner_map[$owner_id]=$owner_map[$owner_id]+1;
+        }
+        foreach ($owner_map as $key => $value) {
+            if($value==0)continue;
+            $this->setCurrentFinishedOrders_byOwnerId($key,$value);
+        }
+    }
+
+    private function setCurrentFinishedOrders_byOwnerId($id,$count,$cancelCount = 0)
+    {
+        $sum = Cache::get("order_count_ownerId_{$id}",function()use($id){
+            return Order::query()
+                ->where('owner_id',$id)
+                ->where('wms_status','订单完成')
+                ->where('wms_edittime','>=',date('Y-m-01 00:00:00'))->count();
+        });
+        $sum += $count;
+        $sum -= $cancelCount;
+        Cache::put("order_count_ownerId_{$id}",$sum,date('Y-m-t 23:59:59'));
+    }
+
+    public function getCurrentFinishedOrders_byOwnerId($id): int
+    {
+        return Cache::get("order_count_ownerId_{$id}",function()use($id){
+            return Order::query()->where('owner_id',$id)
+                ->where('wms_status','订单完成')
+                ->where('wms_edittime','>=',date('Y-m-01 00:00:00'))
+                ->count();
+        });
+    }
 }