mirror of
https://gitee.com/hzchunfen/erp.git
synced 2025-11-30 22:20:45 +00:00
数据统计修复
This commit is contained in:
parent
625acfa290
commit
9229309500
@ -80,6 +80,7 @@ class DailyStockRecordReport extends Command
|
||||
//开始更新数据
|
||||
if (!empty($needUpdateExternalSkuIds)) {
|
||||
$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) {
|
||||
$record = DailyStockRecord::query()->firstOrNew([
|
||||
'sku_id' => $skuId,
|
||||
|
||||
@ -54,6 +54,8 @@ class Kernel extends ConsoleKernel
|
||||
$schedule->command(CheckSkuQualityPeriod::class)->dailyAt('05:30');
|
||||
//快团团售后单拉取
|
||||
$schedule->command(KttOrderAfterSaleQuery::class)->everyFifteenMinutes();
|
||||
//同步售卖信息和报损相关数据
|
||||
$schedule->command(GoodsSkuDailyReport::class)->dailyAt('03:30');
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -123,11 +123,11 @@ class SaleDataService
|
||||
Log::info("dailyRecordGroupBySkuId", $dailyRecordGroupBySkuId);
|
||||
$combineGoodsSkus = collect($goodsSku)->map(function ($v) use ($dailyRecordGroupBySkuId, $orderItems) {
|
||||
$v['yesterday_avg_num'] = round(collect($dailyRecordGroupBySkuId[$v['id']] ?? [])->sortByDesc("day")
|
||||
->take(1)->avg("order_goods_num") ?? 0, 2);
|
||||
->take(1)->avg("order_goods_num") ?? 0, 2);
|
||||
$v['three_day_avg_num'] = round(collect($dailyRecordGroupBySkuId[$v['id']] ?? [])->sortByDesc("day")
|
||||
->take(3)->avg("order_goods_num") ?? 0, 2);
|
||||
->take(3)->avg("order_goods_num") ?? 0, 2);
|
||||
$v['seven_day_avg_num'] = round(collect($dailyRecordGroupBySkuId[$v['id']] ?? [])->sortByDesc("day")
|
||||
->take(7)->avg("order_goods_num") ?? 0, 2);
|
||||
->take(7)->avg("order_goods_num") ?? 0, 2);
|
||||
return $v;
|
||||
})->pluck(null, "external_sku_id")->toArray();
|
||||
Log::info("combineGoodsSkus", $combineGoodsSkus);
|
||||
@ -191,18 +191,47 @@ class SaleDataService
|
||||
->where("external_sku_id", "!=", "")
|
||||
->where("business_order_items.cancel_status", "=", 0)
|
||||
->groupBy('external_sku_id')->get()->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()
|
||||
->Join("goods", "goods_id", "=", "goods.id")
|
||||
->Join("goods_types", "goods.type_id", "=", "goods_types.id")
|
||||
->whereIn("external_sku_id", $externalSkuIds)
|
||||
->select("goods_skus.id", "goods_types.id as type_id", "goods_types.name", "external_sku_id", "stock", "sale_stock")->get()
|
||||
->toArray();
|
||||
->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()->toArray();
|
||||
|
||||
return collect($goodsSkuWithTypes)->map(function ($v) use ($orderItemsKeyByExternalSkuId) {
|
||||
if (!empty($orderItemsKeyByExternalSkuId[$v['external_sku_id']])) {
|
||||
return array_merge($v, $orderItemsKeyByExternalSkuId[$v['external_sku_id']]);
|
||||
return collect($goodsSkuWithTypes)->map(function ($v) use ($skus) {
|
||||
if (!empty($skus[$v['external_sku_id']])) {
|
||||
return array_merge($v, $skus[$v['external_sku_id']]);
|
||||
}
|
||||
})->filter()->values()->groupBy('type_id')->map(function ($v, $key) {
|
||||
return [
|
||||
@ -215,7 +244,7 @@ class SaleDataService
|
||||
"goods_total" => $v->sum("goods_total"),
|
||||
"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)
|
||||
->get()->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()
|
||||
->Join("goods", "goods_id", "=", "goods.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")
|
||||
->whereIn("goods_skus.id", $skuIds)
|
||||
->whereIn("goods_skus.id", array_keys($skus))
|
||||
->get()->toArray();
|
||||
return collect($goodsSkuWithTypes)->map(function ($v) use ($dailyRecordMapKeyBySkuId) {
|
||||
if (!empty($dailyRecordMapKeyBySkuId[$v['id']])) {
|
||||
return array_merge($v, $dailyRecordMapKeyBySkuId[$v['id']]);
|
||||
|
||||
return collect($goodsSkuWithTypes)->map(function ($v) use ($skus) {
|
||||
if (!empty($skus[$v['id']])) {
|
||||
return array_merge($v, $skus[$v['id']]);
|
||||
}
|
||||
})->filter()->values()->groupBy('type_id')->map(function ($v, $key) {
|
||||
return [
|
||||
@ -270,7 +323,7 @@ class SaleDataService
|
||||
"goods_total" => $v->sum("goods_total"),
|
||||
"goods_total_amount" => $v->sum("goods_total_amount"),
|
||||
];
|
||||
})->values()->toArray();
|
||||
})->values()->sortByDesc('goods_total')->toArray();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user