diff --git a/app/Http/Controllers/Goods/GoodsSkusController.php b/app/Http/Controllers/Goods/GoodsSkusController.php index 9411505..80877e3 100644 --- a/app/Http/Controllers/Goods/GoodsSkusController.php +++ b/app/Http/Controllers/Goods/GoodsSkusController.php @@ -50,6 +50,89 @@ class GoodsSkusController extends Controller } public function index(Request $request) + { + $ids = []; + $externals = $this->buildExternals($ids); + $builder = GoodsSku::query(); + $this->preparQueryGoodsSkus($request, $builder); + $day = DateTimeUtils::getToday(); + + $sortField = $request->input('sort_field', 'id');//stock sale_stock order_goods_num + $sortValue = $request->input('sort_value', 'desc'); + $goodsSkusBuilder = (clone $builder)->filter()->with(['goods' => function ($query) { + $query->with(['type' => function ($query) { + $query->with("parentType:id,name")->select(["id", "name", "parent_id"]); + }]); + }]) + ->with(['daily' => function ($query) use ($day) { + $query->where('day', $day); + }]) + ->where('is_combination', 0); + $sum = null; + if ($request->get('goods_title')) { + $fields = implode(',', [ + 'SUM(stock) as stock', + "GROUP_CONCAT(id) as ids" + ]); + $sum = (clone $goodsSkusBuilder)->select(DB::raw($fields))->first(); + $sum['goods_number'] = 0; + if (!empty($sum['ids'])) { + foreach (explode(",", $sum['ids']) as $item) { + $sum['goods_number'] += $ids[$item] ?? 0; + } + } + $sum['real_stock'] = ($sum['stock'] ?? 0) + $sum['goods_number']; + } + if ($sortField == "order_goods_num") { + $finalIds = []; + asort($ids); + foreach ($ids as $id => $number) { + $finalIds[] = $id; + } + if (empty($finalIds)) { + $goodsSkusBuilder->orderBy("id", $sortValue); + } else { + $idField = implode(',', $finalIds); + $goodsSkusBuilder->orderByRaw("FIELD(id,{$idField}) {$sortValue}"); + } + + } else { + $goodsSkusBuilder->orderBy($sortField, $sortValue); + } + + $goodsSkus = $goodsSkusBuilder->paginate($request->get('per_page')); + $rolesName = $request->user()->getRoleNames()->toArray(); + foreach ($goodsSkus as &$sku) { + $lastInventoryTime = !empty($sku['daily']['inventory_time']) ? $sku['daily']['inventory_time'] : date('Y-m-d 07:00:00'); + if (isset($externals[$sku['id']])) { + $sku['order_detail'] = $externals[$sku['id']]; + $sku['order_goods_num'] = $ids[$sku['id']] ?? 0; + } else { + $sku['order_detail'] = []; + $sku['order_goods_num'] = 0; + } + $sku['order_goods_num'] -= $sku['daily']['reissue_num'] ?? 0; + $sku['inventory_time'] = $lastInventoryTime; + if ('销售' === $rolesName[0]) { + $sku['cost'] = 0; + } + + if (!empty($sku['yesterday_num'])) { + $sku['sale_ratio'] = round($sku['stock'] / $sku['yesterday_num'], 2) * 100; + } else { + $sku['sale_ratio'] = 0; + } + $sku['yesterday_num'] = bcadd($sku['stock'], $sku['order_goods_num']); + + } + $data = [ + "manage" => ["is_admin" => in_array($rolesName[0], ["运营", "超级管理员", "管理员", "系统管理员", "店铺运营"]) ? 1 : 0], + "sum" => $sum + ]; + return GoodsSkuResource::collection($goodsSkus)->additional($data); + } + + private function buildExternals($ids) { $fields = implode(',', [ 'shop_id', @@ -75,7 +158,7 @@ class GoodsSkusController extends Controller ->orderByDesc('number') ->get() ->toArray(); - $ids = $externals = []; + $externals = []; foreach ($businessOrderItems as $businessOrderItem) { if (is_null($businessOrderItem['goods_sku'])) { continue; @@ -85,6 +168,7 @@ class GoodsSkusController extends Controller foreach ($businessOrderItem['goods_sku']['combination_goods'] ?? [] as $combinationGoods) { $ids[$combinationGoods['item_id']] = ($ids[$combinationGoods['item_id']] ?? 0) + ((int)$businessOrderItem['number']) * $combinationGoods['item_num']; + $businessOrderItem['goods_number'] = ((int)$businessOrderItem['number']) * $combinationGoods['item_num']; $externals[$combinationGoods['item_id']][] = $businessOrderItem; } } @@ -96,68 +180,10 @@ class GoodsSkusController extends Controller $externals[$id][] = $businessOrderItem; } - - $builder = GoodsSku::query(); - $this->preparQueryGoodsSkus($request, $builder); - $day = DateTimeUtils::getToday(); - - $sortField = $request->input('sort_field', 'id');//stock sale_stock order_goods_num - $sortValue = $request->input('sort_value', 'desc'); - $goodsSkusBuilder = (clone $builder)->filter()->with(['goods' => function ($query) { - $query->with(['type' => function ($query) { - $query->with("parentType:id,name")->select(["id", "name", "parent_id"]); - }]); - }]) - ->with(['daily' => function ($query) use ($day) { - $query->where('day', $day); - }]) - ->where('is_combination', 0); - if ($sortField == "order_goods_num") { - $finalIds = []; - asort($ids); - foreach ($ids as $id => $number) { - $finalIds[] = $id; - } - if (empty($finalIds)) { - $goodsSkusBuilder->orderBy("id", $sortValue); - } else { - $idField = implode(',', $finalIds); - $goodsSkusBuilder->orderByRaw("FIELD(id,{$idField}) {$sortValue}"); - } - - } else { - $goodsSkusBuilder->orderBy($sortField, $sortValue); - } - - $goodsSkus = $goodsSkusBuilder->paginate($request->get('per_page')); - $rolesName = $request->user()->getRoleNames()->toArray(); - foreach ($goodsSkus as &$sku) { - $lastInventoryTime = !empty($sku['daily']['inventory_time']) ? $sku['daily']['inventory_time'] : date('Y-m-d 07:00:00'); - if (isset($externals[$sku['id']])) { - $sku['order_detail'] = $externals[$sku['id']]; - $sku['order_goods_num'] = $ids[$sku['id']]; - } else { - $sku['order_detail'] = []; - $sku['order_goods_num'] = 0; - } - $sku['order_goods_num'] -= $sku['daily']['reissue_num'] ?? 0; - $sku['inventory_time'] = $lastInventoryTime; - if ('销售' === $rolesName[0]) { - $sku['cost'] = 0; - } - - if (!empty($sku['yesterday_num'])) { - $sku['sale_ratio'] = round($sku['stock'] / $sku['yesterday_num'], 2) * 100; - } else { - $sku['sale_ratio'] = 0; - } - $sku['yesterday_num'] = bcadd($sku['stock'], $sku['order_goods_num']); - - } - $data = ["manage" => ["is_admin" => in_array($rolesName[0], ["运营", "超级管理员", "管理员", "系统管理员", "店铺运营"]) ? 1 : 0]]; - return GoodsSkuResource::collection($goodsSkus)->additional($data); + return $externals; } + private function preparQueryGoodsSkus(Request $request, &$builder) { if ($request->get('keyword_type') && $request->get('keyword_value')) { diff --git a/app/Imports/PurchaseImport.php b/app/Imports/PurchaseImport.php index 0525ae5..53c8fe0 100644 --- a/app/Imports/PurchaseImport.php +++ b/app/Imports/PurchaseImport.php @@ -77,7 +77,7 @@ class PurchaseImport implements ToArray, SkipsEmptyRows if (!empty($row[7])) { $purchaseRecords->arrived_time = DateTimeUtils::excelUploadDateToString($row[7], $today,"Y-m-d H:i:s"); }else{ - $purchaseRecords->arrived_time = $today; + $purchaseRecords->arrived_time = Carbon::now()->toDateTimeString(); } $purchaseRecords->buyer_user_id = $buyerUserIdKeyByNameMap[$row[4]] ?? 0; $purchaseRecords->buyer_name = $row[4] ?? '';