feat: #10000 商品库存总量逻辑同步

增加订单占用接口
This commit is contained in:
赵世界 2022-08-12 16:20:40 +08:00
parent 46c59fe993
commit f497b36199
7 changed files with 59 additions and 27 deletions

View File

@ -44,7 +44,7 @@ class Test extends Command
$business = BusinessFactory::init()->make($shop->plat_id);
$business->setShop($shop);
// 下载商品列表
// $business->downloadGoodsList();
// $business->downloadGoodsListAndBind();
// 下载单个商品
// $business->downloadGoods(1);

View File

@ -59,6 +59,7 @@ class GoodsController extends Controller
$goodsSkus = [];
foreach ($request->skus as $item) {
$item['goods_id'] = $goods->id;
$item['stock'] = $item['num'];
$item['reference_price'] = $item['cost'] * 1.5;
$goodsSkus[] = $item;
}

View File

@ -58,6 +58,7 @@ class GoodsSkusController extends Controller
->with(['daily' => function ($query) use ($day) {
$query->where('day', $day);
}])
->orderBy('updated_at', 'desc')
->paginate();
return GoodsSkuResource::collection($goodsSkus);
@ -197,7 +198,6 @@ class GoodsSkusController extends Controller
'target_id' => $sku['id'],
'user_id' => $request->user()->id
];
// 今日到货
$record = DailyStockRecord::query()->where('sku_id', $sku['id'])->where('day', DateTimeUtils::getToday())->first(['id', 'inventory']);
$inventoryLog['target_field'] = 'inventory';
$inventoryLog['before_update'] = $record->inventory;
@ -227,7 +227,7 @@ class GoodsSkusController extends Controller
$update = reset($skus);
DB::beginTransaction();
try {
$sku = GoodsSku::query()->where('id', $update['id'])->first(['id', 'two_days_ago_num', 'yesterday_num', 'num', 'stock']);
$sku = GoodsSku::query()->where('id', $update['id'])->first(['id', 'two_days_ago_num', 'yesterday_num', 'num', 'stock', 'reserve']);
$record = DailyStockRecord::query()
->where('sku_id', $sku->id)
->where('day', DateTimeUtils::getToday())
@ -235,12 +235,15 @@ class GoodsSkusController extends Controller
$this->setBeforeUpdate([
'two_days_ago_num' => $sku->two_days_ago_num,
'yesterday_num' => $sku->yesterday_num,
'num' => $sku->num,
'arrived_today_num' => $record->arrived_today_num,
'num' => $sku->num,
'stock' => $sku->stock,
]);
$sku->two_days_ago_num = $update['two_days_ago_num'];
$sku->yesterday_num = $update['yesterday_num'];
$sku->num = $update['two_days_ago_num'] + $update['yesterday_num'] + $sku->stock;
$stock = $update['two_days_ago_num'] + $update['yesterday_num'] + $update['arrived_today_num'] - $sku->reserve - $record->loss_num;
$sku->stock = $stock;
$sku->num = $stock + $sku->reserve + $record->loss_num;
$sku->save();
$record->arrived_today_num = $update['arrived_today_num'];
$record->save();
@ -248,6 +251,8 @@ class GoodsSkusController extends Controller
'two_days_ago_num' => $sku->two_days_ago_num,
'yesterday_num' => $sku->yesterday_num,
'arrived_today_num' => $record->arrived_today_num,
'num' => $sku->num,
'stock' => $sku->stock,
]);
$this->addLog($sku->id, 'stock');
DB::commit();
@ -301,28 +306,27 @@ class GoodsSkusController extends Controller
return response($this->res, $this->res['httpCode']);
}
$updateField = \request('updateField');
$sku = GoodsSku::query()->find($id);
if ('loss_num' === $updateField) {
$model = DailyStockRecord::query()
$record = DailyStockRecord::query()
->where('sku_id', $id)
->where('day', DateTimeUtils::getToday())
->first(['id', 'loss_num']);
$this->log->message = $request->get('reason');
$this->setBeforeUpdate($model->loss_num);
$model->loss_num += $request->loss_num;
} else {
$model = GoodsSku::query()->find($id);
$this->setBeforeUpdate($model->$updateField);
$this->setBeforeUpdate($record->loss_num);
$record->loss_num += $request->loss_num;
$record->save();
$this->setAfterUpdate($record->loss_num);
$sku->stock -= $request->loss_num;
}
$this->setBeforeUpdate($sku->$updateField);
if ('reserve' === $updateField) {
$changeNum = $model->reserve - $request->reserve;
$model->stock += $changeNum;
$model->reserve = $request->reserve;
$model->num += $changeNum;
} else {
$model->$updateField = $request->$updateField;
$changeNum = $sku->reserve - $request->reserve;
$sku->stock += $changeNum;
}
}
$model->save();
$this->setAfterUpdate($model->$updateField);
$sku->$updateField = $request->$updateField;
$sku->save();
$this->setAfterUpdate($sku->$updateField);
$this->addLog($id, $updateField);
return response($this->res, $this->res['httpCode']);

View File

@ -6,6 +6,7 @@ use App\Http\Controllers\Controller;
use App\Models\Shop;
use App\Http\Resources\ShopsResource;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Validator;
use App\Services\Business\BusinessFactory;
use Illuminate\Validation\Rule;
@ -101,13 +102,33 @@ class ShopsController extends Controller
public function countOrdersNumWithSkuCode(Request $request)
{
Validator::make($request->all(), [
$validator = Validator::make($request->all(), [
'sku_code' => ['required', 'array'],
])->validate();
return BusinessOrderItem::query()
]);
if ($validator->fails()) {
$this->setValidatorFailResponse($validator->getMessageBag()->getMessages());
return response($this->res, $this->res['httpCode']);
}
$fields = implode(',', [
'shop_id',
'external_sku_id',
'count(id) as count',
]);
$res = BusinessOrderItem::query()
->select(DB::raw($fields))
->whereIn('external_sku_id', $request->get('sku_code'))
->groupBy(['shop_id'])
->groupBy(['shop_id', 'external_sku_id'])
->with(['shop:id,name'])
->count('shop_id');
->get();
$data = [];
foreach ($res as $item) {
$data[$item->external_sku_id][] = [
'shop_name' => $item->shop->name,
'count' => $item->count,
];
}
return $data;
}
}

View File

@ -31,7 +31,7 @@ class GoodsSkuRequest extends FormRequest
'sku_code' => ['sometimes', 'required', 'distinct', 'alpha_dash', 'max:32'],
'status' => ['sometimes', 'required', 'integer', Rule::in([0, 1, 2])],
'num' => ['sometimes', 'required', 'integer'],
'cost' => ['sometimes', 'required', 'numeric'],
'cost' => ['sometimes', 'required', 'numeric', 'gt:0'],
'reference_price' => [
'sometimes',
'numeric',

View File

@ -52,6 +52,11 @@ return [
'name' => '字段更新',
'parent_id' => 2,
],
'goods_sku.orders_num' => [
'id' => 28,
'name' => '店铺订单',
'parent_id' => 2,
],
'GOODS_TYPE' => [
'id' => 3,
'name' => '商品种类',

View File

@ -33,6 +33,7 @@ Route::middleware(['auth:api', 'check.permissions'])->group(function () {
Route::patch('single/goods_skus/{id}', [GoodsSkusController::class, 'updateField'])->name('goods_sku.single_update');
// 店铺
Route::resource('shops', 'Shop\ShopsController', ['only' => ['index', 'store', 'show', 'update', 'destroy']]);
Route::get('count/orders/num', [ShopsController::class, 'countOrdersNumWithSkuCode'])->name('goods_sku.orders_num');
// 角色
Route::resource('roles', 'Role\RolesController', ['only' => ['index', 'store', 'show', 'update']]);
Route::post('roles/{id}/permissions', [RolesController::class, 'addPermissions'])->name('roles.permission');