Merge pull request !211 from 赵世界/feat/2024
This commit is contained in:
赵世界 2024-01-19 09:06:56 +00:00 committed by Gitee
commit 282d055f33
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
2 changed files with 68 additions and 31 deletions

View File

@ -41,46 +41,78 @@ class GoodsSkusController extends Controller
public function index(Request $request)
{
$fields = implode(',', [
'shop_id',
'external_sku_id',
'SUM(goods_number) - SUM(already_cancel_number) as number',
]);
$businessOrderItems = BusinessOrderItem::query()
->select(DB::raw($fields))
->with([
'shop:id,name',
'goodsSku:id,external_sku_id'
])
->where('created_at', '>', date('Y-m-d 07:00:00'))
->where('external_sku_id', '<>', '')
->groupBy(['shop_id', 'external_sku_id'])
->orderByDesc('number')
->get()
->toArray();
$ids = $externals = [];
foreach ($businessOrderItems as $businessOrderItem) {
if (is_null($businessOrderItem['goods_sku'])) {
continue;
}
$id = $businessOrderItem['goods_sku']['id'];
if (isset($ids[$id])) {
$ids[$id] += (int)$businessOrderItem['number'];
} else {
$ids[$id] = (int)$businessOrderItem['number'];
}
$externals[$businessOrderItem['external_sku_id']][] = $businessOrderItem;
}
arsort($ids);
$builder = GoodsSku::query();
$this->preparQueryGoodsSkus($request, $builder);
$day = DateTimeUtils::getToday();
$goodsSkus = $builder->filter()
->with(['goods' => function ($query) {
$goodsSkus = (clone $builder)->filter()
->where('is_combination', 0)
->orderByDesc('stock')
->pluck('stock', 'id')
->toArray();
$finalIds = [];
foreach ($ids as $id => $number) {
if (isset($goodsSkus[$id])) {
$finalIds[] = $id;
unset($goodsSkus[$id]);
}
}
$finalIds = array_merge($finalIds, array_keys($goodsSkus));
$idField = implode(',', $finalIds);
$goodsSkus = (clone $builder)->with(['goods' => function ($query) {
$query->with(['type:id,name', 'brand:id,name']);
}])
->with(['daily' => function ($query) use ($day) {
$query->where('day', $day);
}])
->where('is_combination', 0)
->orderBy('stock', 'desc')
->whereIn('id', $finalIds)
->orderByRaw("FIELD(id, {$idField})")
->paginate($request->get('per_page'));
$fields = implode(',', [
'shop_id',
'external_sku_id',
'sum(goods_number) as number',
'sum(already_cancel_number) as cancel_number',
]);
$rolesName = $request->user()->getRoleNames()->toArray();
foreach ($goodsSkus as &$sku) {
$lastInventoryTime = $sku['daily']['inventory_time'] ?: date('Y-m-d 07:00:00');
$orderDetail = BusinessOrderItem::query()
->select(DB::raw($fields))
->with(['shop:id,name'])
->where('external_sku_id', $sku['external_sku_id'])
->when($lastInventoryTime, function ($query) use ($lastInventoryTime) {
$query->where('created_at', '>', $lastInventoryTime);
})
->groupBy(['shop_id', 'external_sku_id'])
->get()
->toArray();
$addOrderGoodsNum = $reduceOrderGoodsNum = 0;
if ($orderDetail) {
$addOrderGoodsNum = array_sum(array_column($orderDetail, 'number'));
$reduceOrderGoodsNum = array_sum(array_column($orderDetail, 'cancel_number'));
if (isset($externals[$sku['external_sku_id']])) {
$sku['order_detail'] = $externals[$sku['external_sku_id']];
$sku['order_goods_num'] = array_sum(array_column($externals[$sku['external_sku_id']], 'number'));
} else {
$sku['order_detail'] = [];
$sku['order_goods_num'] = 0;
}
$sku['inventory_time'] = $lastInventoryTime;
$sku['order_goods_num'] = $addOrderGoodsNum - $reduceOrderGoodsNum;
$sku['order_detail'] = $orderDetail;
if ('销售' === $rolesName[0]) {
$sku['cost'] = 0;
}

View File

@ -44,4 +44,9 @@ class BusinessOrderItem extends Model
{
return $this->hasOne(GoodsSkuLocation::class, 'external_sku_id', 'external_sku_id');
}
public function goodsSku()
{
return $this->hasOne(GoodsSku::class, 'external_sku_id', 'external_sku_id');
}
}