ANG YU 5 лет назад
Родитель
Сommit
a9fb3bfdd7

+ 37 - 10
app/Services/NewOrderCountingRecordService.php

@@ -99,14 +99,30 @@ class NewOrderCountingRecordService
             case '年':
                 break;
             case '月':
+                $lowUnit = '周';
+                $conditionClone = ['unit' => $lowUnit, 'data' => []];
+                foreach ($queryCondition['data'] as $date => $ownerIds) {
+                    $startAt = $date;
+                    $endAt = Carbon::parse($date)->endOfMonth()->toDateString();
+                    $items = $this->transfersToCondition(
+                        $startAt, $endAt, $lowUnit, $ownerIds
+                    )['data'];
+                    foreach ($items as $dateStr => $item) {
+                        if (empty($conditionClone['data'][$dateStr])) $conditionClone['data'][$dateStr] = $dateStr;
+                        $conditionClone['data'][$dateStr] = ($item);
+                    }
+                }
+                $orderCountingRecords_days = $this->getOrderCountingRecords($conditionClone);
+                $orderCountingRecords_combinedByLower = $this->turnGradingUpToLow($orderCountingRecords_days, $lowUnit, 'month');
                 break;
             case '周':
-                $conditionClone = ['unit' => '日', 'data' => []];
+                $lowUnit = '日';
+                $conditionClone = ['unit' => $lowUnit, 'data' => []];
                 foreach ($queryCondition['data'] as $date => $ownerIds) {
                     $startAt = $date;
                     $endAt = Carbon::parse($date)->endOfWeek()->toDateString();
                     $items = $this->transfersToCondition(
-                        $startAt, $endAt, '日', $ownerIds
+                        $startAt, $endAt, $lowUnit, $ownerIds
                     )['data'];
                     foreach ($items as $dateStr => $item) {
                         if (empty($conditionClone['data'][$dateStr])) $conditionClone['data'][$dateStr] = $dateStr;
@@ -114,7 +130,7 @@ class NewOrderCountingRecordService
                     }
                 }
                 $orderCountingRecords_days = $this->getOrderCountingRecords($conditionClone);
-                $orderCountingRecords_combinedByLower = $this->turnDaysToWeeks($orderCountingRecords_days);
+                $orderCountingRecords_combinedByLower = $this->turnGradingUpToLow($orderCountingRecords_days, $lowUnit, 'week');
                 break;
             case '日':
                 return [[], $queryCondition];
@@ -263,7 +279,7 @@ class NewOrderCountingRecordService
         return $dataFromMiddleTable;
     }
 
-    public function count($orderCountingRecords_days)
+    public function count($orderCountingRecords_days, $unit)
     {
         $isEnd = false;
         $result = collect();
@@ -277,22 +293,33 @@ class NewOrderCountingRecordService
                 }
                 $amount += $itemToCount->amount;
             } else {
-                $result = $result->concat($this->count($itemToCount));
+                $result = $result->concat($this->count($itemToCount, $unit));
             }
         }
         if ($isEnd) {
-            $item['date_target'] = Carbon::parse($item['date_target'])->startOfWeek()->toDateString();
+            switch ($unit) {
+                case "日":
+                    $item['date_target'] = Carbon::parse($item['date_target'])->startOfWeek()->toDateString();
+                    break;
+                case "周":
+                    $item['date_target'] = Carbon::parse($item['date_target'])->firstOfMonth()->toDateString();
+                    break;
+                case "月":
+                    $item['date_target'] = Carbon::parse($item['date_target'])->firstOfYear()->toDateString();
+                    break;
+            }
+
             $item['amount'] = $amount;
-            $item['counting_unit'] = '周';
+            $item['counting_unit'] = $unit;
             return $result->push($item);
         }
         return $result;
     }
 
-    public function turnDaysToWeeks($orderCountingRecords_days)
+    public function turnGradingUpToLow($orderCountingRecords_days, $unit, $grading)
     {
-        $orderCountingRecords_days = $orderCountingRecords_days->groupBy(['owner_id','shop_id','warehouse_id','logistic_id','week']);
-        return $this->count($orderCountingRecords_days);
+        $orderCountingRecords_days = $orderCountingRecords_days->groupBy(['owner_id', 'shop_id', 'warehouse_id', 'logistic_id', $grading]);
+        return $this->count($orderCountingRecords_days, $unit);
     }
 
     public function setDefultData($dataFromMiddleTable, $queryCondition)

+ 22 - 1
tests/Services/NewOrderCountingRecordService/GetOrderCountingRecordsTest.php

@@ -170,7 +170,28 @@ class GetOrderCountingRecordsTest extends TestCase
             }
         }
         $result = $this->newOrderCountingRecordService->getOrderCountingRecords($this->queryConditionWeek);
-        $this->assertNotEmpty($result);
+        dump($result->toArray());
+        $this->assertEquals([1,1,1,1],array_column($result->toArray(),'amount'));
     }
 
+    /**
+     * @test
+     */
+    public function get_all_from_orders_Month()
+    {
+        for ($i = 0; $i <= $this->step_length; $i++) {
+            foreach ($this->ownerIds as $ownerId) {
+                $dateStr = Carbon::now()->subMonths($i)->toDateTimeString();
+                $order = factory(Order::class)->create([
+                    'created_at' => $dateStr,
+                    'owner_id' => $ownerId,
+                    'wms_status' => '订单完成'
+                ]);
+                $this->orderIds = $order->id;
+            }
+        }
+        $result = $this->newOrderCountingRecordService->getOrderCountingRecords($this->queryConditionMonth);
+        dd($result->toArray());
+        $this->assertEquals([1,1,1,1],array_column($result->toArray(),'amount'));
+    }
 }