11-18需求

This commit is contained in:
杨建炊 2024-11-18 10:26:56 +08:00
parent 08270f5a4a
commit 8724b7ef24
2 changed files with 88 additions and 62 deletions

View File

@ -50,6 +50,89 @@ class GoodsSkusController extends Controller
} }
public function index(Request $request) 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(',', [ $fields = implode(',', [
'shop_id', 'shop_id',
@ -75,7 +158,7 @@ class GoodsSkusController extends Controller
->orderByDesc('number') ->orderByDesc('number')
->get() ->get()
->toArray(); ->toArray();
$ids = $externals = []; $externals = [];
foreach ($businessOrderItems as $businessOrderItem) { foreach ($businessOrderItems as $businessOrderItem) {
if (is_null($businessOrderItem['goods_sku'])) { if (is_null($businessOrderItem['goods_sku'])) {
continue; continue;
@ -85,6 +168,7 @@ class GoodsSkusController extends Controller
foreach ($businessOrderItem['goods_sku']['combination_goods'] ?? [] as $combinationGoods) { foreach ($businessOrderItem['goods_sku']['combination_goods'] ?? [] as $combinationGoods) {
$ids[$combinationGoods['item_id']] = ($ids[$combinationGoods['item_id']] ?? 0) $ids[$combinationGoods['item_id']] = ($ids[$combinationGoods['item_id']] ?? 0)
+ ((int)$businessOrderItem['number']) * $combinationGoods['item_num']; + ((int)$businessOrderItem['number']) * $combinationGoods['item_num'];
$businessOrderItem['goods_number'] = ((int)$businessOrderItem['number']) * $combinationGoods['item_num'];
$externals[$combinationGoods['item_id']][] = $businessOrderItem; $externals[$combinationGoods['item_id']][] = $businessOrderItem;
} }
} }
@ -96,67 +180,9 @@ class GoodsSkusController extends Controller
$externals[$id][] = $businessOrderItem; $externals[$id][] = $businessOrderItem;
} }
return $externals;
$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);
}
private function preparQueryGoodsSkus(Request $request, &$builder) private function preparQueryGoodsSkus(Request $request, &$builder)
{ {

View File

@ -77,7 +77,7 @@ class PurchaseImport implements ToArray, SkipsEmptyRows
if (!empty($row[7])) { if (!empty($row[7])) {
$purchaseRecords->arrived_time = DateTimeUtils::excelUploadDateToString($row[7], $today,"Y-m-d H:i:s"); $purchaseRecords->arrived_time = DateTimeUtils::excelUploadDateToString($row[7], $today,"Y-m-d H:i:s");
}else{ }else{
$purchaseRecords->arrived_time = $today; $purchaseRecords->arrived_time = Carbon::now()->toDateTimeString();
} }
$purchaseRecords->buyer_user_id = $buyerUserIdKeyByNameMap[$row[4]] ?? 0; $purchaseRecords->buyer_user_id = $buyerUserIdKeyByNameMap[$row[4]] ?? 0;
$purchaseRecords->buyer_name = $row[4] ?? ''; $purchaseRecords->buyer_name = $row[4] ?? '';