From b8297fdf3e65ce7084a46bf0792518f04765a1a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E4=B8=96=E7=95=8C?= <642747453@qq.com> Date: Fri, 2 Sep 2022 16:23:11 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20#10000=20=E5=AF=BC=E5=87=BA=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Exports/GoodsSkusExport.php | 61 +++++++++++++++++++++++++-------- 1 file changed, 46 insertions(+), 15 deletions(-) diff --git a/app/Exports/GoodsSkusExport.php b/app/Exports/GoodsSkusExport.php index 6060b09..9ad2b68 100644 --- a/app/Exports/GoodsSkusExport.php +++ b/app/Exports/GoodsSkusExport.php @@ -3,6 +3,7 @@ namespace App\Exports; use App\Models\Log; +use App\Utils\DateTimeUtils; use Maatwebsite\Excel\Concerns\FromCollection; use Maatwebsite\Excel\Concerns\ShouldAutoSize; use App\Models\GoodsSku; @@ -20,8 +21,8 @@ class GoodsSkusExport implements FromCollection, ShouldAutoSize } /** - * @return \Illuminate\Support\Collection - */ + * @return \Illuminate\Support\Collection + */ public function collection() { return new Collection($this->data); @@ -36,24 +37,47 @@ class GoodsSkusExport implements FromCollection, ShouldAutoSize '商品品牌', '规格编码', '规格名称', - '成本', - '库存', ]; - $inventoryTime = strtotime(date('Y-m-d 07:00:00')); - $ids = Log::query()->where('target_type', 'goods_sku') + $map = [ + 'cost' => ['成本', '更新前成本', '更新后成本'], + 'inventory' => ['库存', '盘点'], + ]; + $headTitle = array_merge($headTitle, $map[$this->type]); + $day = DateTimeUtils::getToday(); + $update = []; + $logs = Log::query() + ->select(['target_id', 'before_update', 'after_update']) + ->where('target_type', 'goods_sku') ->where('target_field', $this->type) - ->where('created_at', '>', $inventoryTime) - ->pluck('target_id') - ->toArray(); - $data = GoodsSku::query() + ->where('created_at', '>', $day) + ->orderBy('id', 'asc') + ->get(); + foreach ($logs as $log) { + if ($log['before_update'] != $log['after_update']) { + if (!isset($update[$log['target_id']])) { + $update[$log['target_id']]['before_update'] = $log['before_update']; + } + $update[$log['target_id']]['after_update'] = $log['after_update']; + } + } + $ids = array_keys($update); + if (empty($ids)) { + return [$headTitle]; + } + $model = GoodsSku::query() ->when($ids, function ($query, $ids) { return $query->whereIn('id', $ids); }) ->with(['goods' => function ($query) { $query->with(['type:id,name', 'brand:id,name']); - }]) - ->get() - ->toArray(); + }]); + if ('inventory' === $this->type) { + $model->where('stock', '<>', 0); + $model->with(['daily' => function ($query) use ($day) { + $query->where('day', $day); + }]); + } + $data = $model->get()->toArray(); if (empty($data)) { return [$headTitle]; } @@ -65,8 +89,15 @@ class GoodsSkusExport implements FromCollection, ShouldAutoSize $arr[3] = $item['goods']['brand']['name']; $arr[4] = $item['sku_code']; $arr[5] = $item['title']; - $arr[6] = $item['cost']; - $arr[7] = $item['stock']; + if ('cost' === $this->type) { + $arr[6] = $item['cost']; + $arr[7] = $update[$item['id']]['before_update']; + $arr[8] = $update[$item['id']]['after_update']; + } + if ('inventory' === $this->type) { + $arr[6] = $item['stock']; + $arr[7] = $item['daily']['inventory']; + } $bodyData[] = $arr; } unset($arr);