11-18需求
This commit is contained in:
parent
08270f5a4a
commit
8724b7ef24
@ -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,68 +180,10 @@ 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)
|
||||||
{
|
{
|
||||||
if ($request->get('keyword_type') && $request->get('keyword_value')) {
|
if ($request->get('keyword_type') && $request->get('keyword_value')) {
|
||||||
|
|||||||
@ -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] ?? '';
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user