mirror of
https://gitee.com/hzchunfen/erp.git
synced 2025-11-30 22:20:45 +00:00
库存扣减
This commit is contained in:
parent
43b9c9516b
commit
3f776c8d58
@ -3,6 +3,7 @@
|
|||||||
namespace App\Services\GoodSku;
|
namespace App\Services\GoodSku;
|
||||||
|
|
||||||
use App\Events\BatchStockUpdateEvent;
|
use App\Events\BatchStockUpdateEvent;
|
||||||
|
use App\Http\Enum\BusinessOrderShippingStatus;
|
||||||
use App\Http\Enum\TargetTypeEnum;
|
use App\Http\Enum\TargetTypeEnum;
|
||||||
use App\Models\BusinessOrderItem;
|
use App\Models\BusinessOrderItem;
|
||||||
use App\Models\CombinationGood;
|
use App\Models\CombinationGood;
|
||||||
@ -15,6 +16,7 @@ use Carbon\Carbon;
|
|||||||
use Illuminate\Support\Facades\Auth;
|
use Illuminate\Support\Facades\Auth;
|
||||||
use Illuminate\Support\Facades\DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
|
use phpDocumentor\Reflection\Types\Collection;
|
||||||
|
|
||||||
class GoodSkuService
|
class GoodSkuService
|
||||||
{
|
{
|
||||||
@ -101,26 +103,49 @@ class GoodSkuService
|
|||||||
public function handleSkusWithCombinationGoods(array $skusWithCombinationGoods)
|
public function handleSkusWithCombinationGoods(array $skusWithCombinationGoods)
|
||||||
{
|
{
|
||||||
//查询sku当前未发货的数量 需要扣减
|
//查询sku当前未发货的数量 需要扣减
|
||||||
//$externalSkuIds = collect($skusWithCombinationGoods)->pluck("external_sku_id")->toArray();
|
$externalSkuIds = collect($skusWithCombinationGoods)->pluck("external_sku_id")->toArray();
|
||||||
|
$skuIds = collect($skusWithCombinationGoods)->pluck("id")->toArray();
|
||||||
|
//关联的组合数据
|
||||||
|
$combinationGoods = CombinationGood::query()->with("goodsSku:id,external_sku_id")->where('item_id', $skuIds)->get()->toArray();
|
||||||
|
$externalSkuIds = collect($combinationGoods)->pluck("goods_sku.external_sku_id")->merge(collect($externalSkuIds))->toArray();
|
||||||
|
|
||||||
//默认只查15天内未发货的数据
|
//默认只查15天内未发货的数据
|
||||||
$unshippedData = [];
|
$startTime = Carbon::now()->subDays(15)->startOfDay()->toDateTimeString();
|
||||||
//发货状态异常 先关闭扣减
|
|
||||||
/*$startTime = Carbon::now()->subDays(15)->startOfDay()->toDateTimeString();
|
|
||||||
$unshippedDataCollect = BusinessOrderItem::query()
|
$unshippedDataCollect = BusinessOrderItem::query()
|
||||||
|
->with([
|
||||||
|
'shop:id,name',
|
||||||
|
'goodsSku:id,external_sku_id,is_combination',
|
||||||
|
'goodsSku.combinationGoods:id,goods_sku_id,item_id,item_num'
|
||||||
|
])
|
||||||
->leftJoin("business_orders as b", "business_order_id", "=", "b.id")
|
->leftJoin("business_orders as b", "business_order_id", "=", "b.id")
|
||||||
->select("external_sku_id", DB::raw("sum(goods_number) as goods_total"), DB::raw("sum(already_cancel_number) as cancel_total"))
|
->select("external_sku_id", DB::raw("SUM(goods_number) - SUM(already_cancel_number) as number"))
|
||||||
->whereIn("external_sku_id", $externalSkuIds)->where("b.shipping_status", "=", 0)
|
->whereIn("external_sku_id", $externalSkuIds)
|
||||||
|
->where("b.shipping_status", "=", BusinessOrderShippingStatus::UNSHIP)
|
||||||
->where("business_order_items.created_at", ">=", $startTime)->where("business_order_items.cancel_status", "=", 0)
|
->where("business_order_items.created_at", ">=", $startTime)->where("business_order_items.cancel_status", "=", 0)
|
||||||
->groupBy('external_sku_id')->get()->toArray();
|
->groupBy('external_sku_id')->get()->toArray();
|
||||||
$unshippedData = collect($unshippedDataCollect)->pluck(null, "external_sku_id")->toArray();
|
//重组订单
|
||||||
Log::info("15日内未发货数据", $unshippedData);
|
foreach ($unshippedDataCollect as $businessOrderItem) {
|
||||||
*/
|
if (is_null($businessOrderItem['goods_sku'])) {
|
||||||
return collect($skusWithCombinationGoods)->map(function ($v) use ($unshippedData) {
|
continue;
|
||||||
$v['real_stock'] = $v['inventory'] ?? null;
|
}
|
||||||
if (!empty($unshippedData[$v['external_sku_id']]) && isset($v['inventory'])) {
|
$id = $businessOrderItem['goods_sku']['id'];
|
||||||
$v['real_stock'] = $v['inventory'] - $unshippedData[$v['external_sku_id']]['goods_total']
|
if ($businessOrderItem['goods_sku']['is_combination']) {
|
||||||
+ $unshippedData[$v['external_sku_id']]['cancel_total'];
|
foreach ($businessOrderItem['goods_sku']['combination_goods'] ?? [] as $combinationGoods) {
|
||||||
|
$ids[$combinationGoods['item_id']] = ($ids[$combinationGoods['item_id']] ?? 0)
|
||||||
|
+ ((int)$businessOrderItem['number']) * $combinationGoods['item_num'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (isset($ids[$id])) {
|
||||||
|
$ids[$id] += (int)$businessOrderItem['number'];
|
||||||
|
} else {
|
||||||
|
$ids[$id] = (int)$businessOrderItem['number'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return collect($skusWithCombinationGoods)->map(function ($v) use ($ids) {
|
||||||
|
$v['real_stock'] = $v['inventory'] ?? null;
|
||||||
|
if (!empty($ids[$v['id']]) && isset($v['inventory'])) {
|
||||||
|
$v['real_stock'] = $v['inventory'] - $ids[$v['id']];
|
||||||
}
|
}
|
||||||
return $v;
|
return $v;
|
||||||
})->toArray();
|
})->toArray();
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user