mirror of
https://gitee.com/hzchunfen/erp.git
synced 2025-12-01 06:30:49 +00:00
订单倒序
This commit is contained in:
parent
75d940868b
commit
a96cc3b518
@ -41,46 +41,78 @@ class GoodsSkusController extends Controller
|
|||||||
|
|
||||||
public function index(Request $request)
|
public function index(Request $request)
|
||||||
{
|
{
|
||||||
$builder = GoodsSku::query();
|
|
||||||
$this->preparQueryGoodsSkus($request, $builder);
|
|
||||||
$day = DateTimeUtils::getToday();
|
|
||||||
$goodsSkus = $builder->filter()
|
|
||||||
->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')
|
|
||||||
->paginate($request->get('per_page'));
|
|
||||||
$fields = implode(',', [
|
$fields = implode(',', [
|
||||||
'shop_id',
|
'shop_id',
|
||||||
'external_sku_id',
|
'external_sku_id',
|
||||||
'sum(goods_number) as number',
|
'SUM(goods_number) - SUM(already_cancel_number) as number',
|
||||||
'sum(already_cancel_number) as cancel_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 = (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);
|
||||||
|
}])
|
||||||
|
->whereIn('id', $finalIds)
|
||||||
|
->orderByRaw("FIELD(id, {$idField})")
|
||||||
|
->paginate($request->get('per_page'));
|
||||||
|
|
||||||
$rolesName = $request->user()->getRoleNames()->toArray();
|
$rolesName = $request->user()->getRoleNames()->toArray();
|
||||||
foreach ($goodsSkus as &$sku) {
|
foreach ($goodsSkus as &$sku) {
|
||||||
$lastInventoryTime = $sku['daily']['inventory_time'] ?: date('Y-m-d 07:00:00');
|
$lastInventoryTime = $sku['daily']['inventory_time'] ?: date('Y-m-d 07:00:00');
|
||||||
$orderDetail = BusinessOrderItem::query()
|
if (isset($externals[$sku['external_sku_id']])) {
|
||||||
->select(DB::raw($fields))
|
$sku['order_detail'] = $externals[$sku['external_sku_id']];
|
||||||
->with(['shop:id,name'])
|
$sku['order_goods_num'] = array_sum(array_column($externals[$sku['external_sku_id']], 'number'));
|
||||||
->where('external_sku_id', $sku['external_sku_id'])
|
} else {
|
||||||
->when($lastInventoryTime, function ($query) use ($lastInventoryTime) {
|
$sku['order_detail'] = [];
|
||||||
$query->where('created_at', '>', $lastInventoryTime);
|
$sku['order_goods_num'] = 0;
|
||||||
})
|
|
||||||
->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'));
|
|
||||||
}
|
}
|
||||||
$sku['inventory_time'] = $lastInventoryTime;
|
$sku['inventory_time'] = $lastInventoryTime;
|
||||||
$sku['order_goods_num'] = $addOrderGoodsNum - $reduceOrderGoodsNum;
|
|
||||||
$sku['order_detail'] = $orderDetail;
|
|
||||||
if ('销售' === $rolesName[0]) {
|
if ('销售' === $rolesName[0]) {
|
||||||
$sku['cost'] = 0;
|
$sku['cost'] = 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -44,4 +44,9 @@ class BusinessOrderItem extends Model
|
|||||||
{
|
{
|
||||||
return $this->hasOne(GoodsSkuLocation::class, 'external_sku_id', 'external_sku_id');
|
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');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user