11-18需求
This commit is contained in:
parent
08270f5a4a
commit
8724b7ef24
@ -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')) {
|
||||
|
||||
@ -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] ?? '';
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user