数据统计修复

This commit is contained in:
杨建炊 2024-11-01 15:42:23 +08:00
parent 625acfa290
commit 9229309500
3 changed files with 73 additions and 17 deletions

View File

@ -80,6 +80,7 @@ class DailyStockRecordReport extends Command
//开始更新数据 //开始更新数据
if (!empty($needUpdateExternalSkuIds)) { if (!empty($needUpdateExternalSkuIds)) {
$needUpdateSkuIdsMap = GoodsSku::query()->whereIn("external_sku_id", $needUpdateExternalSkuIds)->pluck("external_sku_id", 'id')->toArray(); $needUpdateSkuIdsMap = GoodsSku::query()->whereIn("external_sku_id", $needUpdateExternalSkuIds)->pluck("external_sku_id", 'id')->toArray();
collect($needUpdateSkuIdsMap)->each(function ($externalSkuId,$skuId) use ($date, $orderItems, $purchaseRecords, $lossRecords) { collect($needUpdateSkuIdsMap)->each(function ($externalSkuId,$skuId) use ($date, $orderItems, $purchaseRecords, $lossRecords) {
$record = DailyStockRecord::query()->firstOrNew([ $record = DailyStockRecord::query()->firstOrNew([
'sku_id' => $skuId, 'sku_id' => $skuId,

View File

@ -54,6 +54,8 @@ class Kernel extends ConsoleKernel
$schedule->command(CheckSkuQualityPeriod::class)->dailyAt('05:30'); $schedule->command(CheckSkuQualityPeriod::class)->dailyAt('05:30');
//快团团售后单拉取 //快团团售后单拉取
$schedule->command(KttOrderAfterSaleQuery::class)->everyFifteenMinutes(); $schedule->command(KttOrderAfterSaleQuery::class)->everyFifteenMinutes();
//同步售卖信息和报损相关数据
$schedule->command(GoodsSkuDailyReport::class)->dailyAt('03:30');
} }

View File

@ -191,18 +191,47 @@ class SaleDataService
->where("external_sku_id", "!=", "") ->where("external_sku_id", "!=", "")
->where("business_order_items.cancel_status", "=", 0) ->where("business_order_items.cancel_status", "=", 0)
->groupBy('external_sku_id')->get()->toArray(); ->groupBy('external_sku_id')->get()->toArray();
$externalSkuIds = collect($orderItems)->pluck("external_sku_id")->toArray(); $externalSkuIds = collect($orderItems)->pluck("external_sku_id")->toArray();
$orderItemsKeyByExternalSkuId = collect($orderItems)->pluck(null, "external_sku_id")->toArray(); $goodsSkus = GoodsSku::query()
->with([
'combinationGoods:id,goods_sku_id,item_id,item_num',
'combinationGoods.goodsSkuItem:id,name,goods_id,title,stock,sale_stock,external_sku_id,updated_at,yesterday_num,reference_price,status',
])
->whereIn("external_sku_id", $externalSkuIds)->get()->pluck(null, "external_sku_id")
->toArray();
$skus = [];
//组合商品
foreach ($orderItems as $orderItem) {
$sku = $goodsSkus[$orderItem['external_sku_id']] ?? [];
if (!empty($sku['is_combination'])) {
foreach ($sku['combination_goods'] as $combinationGood) {
$skuItem = $goodsSkus[$combinationGood['goods_sku_item']['external_sku_id']] ?? [];
$skuItem['shipping_num'] = $skuItem['shipping_num'] ?? 0 + $orderItem['shipping_num'] * $combinationGood['item_num'];
$skuItem['unshipping_num'] = $skuItem['unshipping_num'] ?? 0 + $orderItem['unshipping_num'] * $combinationGood['item_num'];
$skuItem['goods_total'] = $skuItem['goods_total'] ?? 0 + $orderItem['goods_total'] * $combinationGood['item_num'];
$skuItem['goods_total_amount'] = $skuItem['goods_total_amount'] ?? 0 + $orderItem['goods_total_amount'] * $combinationGood['item_num'];
$skus[$combinationGood['goods_sku_item']['external_sku_id']] = $skuItem;
}
} else {
$skuItem = $skus[$orderItem['external_sku_id']] ?? [];
$skuItem['shipping_num'] = $skuItem['shipping_num'] ?? 0 + $orderItem['shipping_num'];
$skuItem['unshipping_num'] = $skuItem['unshipping_num'] ?? 0 + $orderItem['unshipping_num'];
$skuItem['goods_total'] = $skuItem['goods_total'] ?? 0 + $orderItem['goods_total'];
$skuItem['goods_total_amount'] = $skuItem['goods_total_amount'] ?? 0 + $orderItem['goods_total_amount'];
$skus[$orderItem['external_sku_id']] = $skuItem;
}
}
$goodsSkuWithTypes = GoodsSku::query() $goodsSkuWithTypes = GoodsSku::query()
->Join("goods", "goods_id", "=", "goods.id") ->Join("goods", "goods_id", "=", "goods.id")
->Join("goods_types", "goods.type_id", "=", "goods_types.id") ->Join("goods_types", "goods.type_id", "=", "goods_types.id")
->whereIn("external_sku_id", $externalSkuIds) ->whereIn("external_sku_id", array_keys($skus))
->select("goods_skus.id", "goods_types.id as type_id", "goods_types.name", "external_sku_id", "stock", "sale_stock")->get() ->select("goods_skus.id", "goods_types.id as type_id", "goods_types.name", "external_sku_id", "stock", "sale_stock")
->toArray(); ->get()->toArray();
return collect($goodsSkuWithTypes)->map(function ($v) use ($orderItemsKeyByExternalSkuId) { return collect($goodsSkuWithTypes)->map(function ($v) use ($skus) {
if (!empty($orderItemsKeyByExternalSkuId[$v['external_sku_id']])) { if (!empty($skus[$v['external_sku_id']])) {
return array_merge($v, $orderItemsKeyByExternalSkuId[$v['external_sku_id']]); return array_merge($v, $skus[$v['external_sku_id']]);
} }
})->filter()->values()->groupBy('type_id')->map(function ($v, $key) { })->filter()->values()->groupBy('type_id')->map(function ($v, $key) {
return [ return [
@ -215,7 +244,7 @@ class SaleDataService
"goods_total" => $v->sum("goods_total"), "goods_total" => $v->sum("goods_total"),
"goods_total_amount" => $v->sum("goods_total_amount"), "goods_total_amount" => $v->sum("goods_total_amount"),
]; ];
})->values()->toArray(); })->values()->sortByDesc('goods_total')->toArray();
} }
/** /**
@ -250,16 +279,40 @@ class SaleDataService
->having(DB::raw("sum(order_goods_num)"), ">", 0) ->having(DB::raw("sum(order_goods_num)"), ">", 0)
->get()->toArray(); ->get()->toArray();
$skuIds = collect($dailyAllRecord)->pluck('sku_id')->toArray(); $skuIds = collect($dailyAllRecord)->pluck('sku_id')->toArray();
$dailyRecordMapKeyBySkuId = collect($dailyAllRecord)->pluck(null, 'sku_id')->toArray(); $goodsSkus = GoodsSku::query()
->with([
'combinationGoods:id,goods_sku_id,item_id,item_num'
])
->whereIn("id", $skuIds)->get()->pluck(null, "id")
->toArray();
$skus = [];
//组合商品需要分散到sku维度进行统计
foreach ($dailyAllRecord as $skuRecord) {
$sku = $goodsSkus[$skuRecord['sku_id']] ?? [];
if (!empty($sku['is_combination'])) {
foreach ($sku['combination_goods'] as $combinationGood) {
$skuItem = $goodsSkus[$combinationGood['item_id']] ?? [];
$skuItem['goods_total'] = $skuItem['goods_total'] ?? 0 + $skuRecord['goods_total'] * $combinationGood['item_num'];
$skuItem['goods_total_amount'] = $skuItem['goods_total_amount'] ?? 0 + $skuRecord['goods_total_amount'] * $combinationGood['item_num'];
$skus[$combinationGood['item_id']] = $skuItem;
}
} else {
$skuItem = $skus[$skuRecord['sku_id']] ?? [];
$skuItem['goods_total'] = $skuItem['goods_total'] ?? 0 + $skuRecord['goods_total'];
$skuItem['goods_total_amount'] = $skuItem['goods_total_amount'] ?? 0 + $skuRecord['goods_total_amount'];
$skus[$skuRecord['sku_id']] = $skuItem;
}
}
$goodsSkuWithTypes = GoodsSku::query() $goodsSkuWithTypes = GoodsSku::query()
->Join("goods", "goods_id", "=", "goods.id") ->Join("goods", "goods_id", "=", "goods.id")
->Join("goods_types", "goods.type_id", "=", "goods_types.id") ->Join("goods_types", "goods.type_id", "=", "goods_types.id")
->select("goods_skus.id", "goods_types.id as type_id", "goods_types.name", "external_sku_id", "stock", "sale_stock") ->select("goods_skus.id", "goods_types.id as type_id", "goods_types.name", "external_sku_id", "stock", "sale_stock")
->whereIn("goods_skus.id", $skuIds) ->whereIn("goods_skus.id", array_keys($skus))
->get()->toArray(); ->get()->toArray();
return collect($goodsSkuWithTypes)->map(function ($v) use ($dailyRecordMapKeyBySkuId) {
if (!empty($dailyRecordMapKeyBySkuId[$v['id']])) { return collect($goodsSkuWithTypes)->map(function ($v) use ($skus) {
return array_merge($v, $dailyRecordMapKeyBySkuId[$v['id']]); if (!empty($skus[$v['id']])) {
return array_merge($v, $skus[$v['id']]);
} }
})->filter()->values()->groupBy('type_id')->map(function ($v, $key) { })->filter()->values()->groupBy('type_id')->map(function ($v, $key) {
return [ return [
@ -270,7 +323,7 @@ class SaleDataService
"goods_total" => $v->sum("goods_total"), "goods_total" => $v->sum("goods_total"),
"goods_total_amount" => $v->sum("goods_total_amount"), "goods_total_amount" => $v->sum("goods_total_amount"),
]; ];
})->values()->toArray(); })->values()->sortByDesc('goods_total')->toArray();
} }
/** /**