diff --git a/app/Console/Commands/Test.php b/app/Console/Commands/Test.php index 619eb6b..d8d0c01 100644 --- a/app/Console/Commands/Test.php +++ b/app/Console/Commands/Test.php @@ -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); diff --git a/app/Http/Controllers/Goods/GoodsController.php b/app/Http/Controllers/Goods/GoodsController.php index 0dedbb7..fbb7fef 100644 --- a/app/Http/Controllers/Goods/GoodsController.php +++ b/app/Http/Controllers/Goods/GoodsController.php @@ -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; } diff --git a/app/Http/Controllers/Goods/GoodsSkusController.php b/app/Http/Controllers/Goods/GoodsSkusController.php index 701fab0..b70843d 100644 --- a/app/Http/Controllers/Goods/GoodsSkusController.php +++ b/app/Http/Controllers/Goods/GoodsSkusController.php @@ -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); - if ('reserve' === $updateField) { - $changeNum = $model->reserve - $request->reserve; - $model->stock += $changeNum; - $model->reserve = $request->reserve; - $model->num += $changeNum; - } else { - $model->$updateField = $request->$updateField; - } + $this->setBeforeUpdate($record->loss_num); + $record->loss_num += $request->loss_num; + $record->save(); + $this->setAfterUpdate($record->loss_num); + $sku->stock -= $request->loss_num; } - $model->save(); - $this->setAfterUpdate($model->$updateField); + $this->setBeforeUpdate($sku->$updateField); + if ('reserve' === $updateField) { + $changeNum = $sku->reserve - $request->reserve; + $sku->stock += $changeNum; + } + $sku->$updateField = $request->$updateField; + $sku->save(); + $this->setAfterUpdate($sku->$updateField); $this->addLog($id, $updateField); return response($this->res, $this->res['httpCode']); diff --git a/app/Http/Controllers/Shop/ShopsController.php b/app/Http/Controllers/Shop/ShopsController.php index 63df107..e6f3245 100644 --- a/app/Http/Controllers/Shop/ShopsController.php +++ b/app/Http/Controllers/Shop/ShopsController.php @@ -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; } } diff --git a/app/Http/Requests/GoodsSkuRequest.php b/app/Http/Requests/GoodsSkuRequest.php index 2af032a..a9b2592 100644 --- a/app/Http/Requests/GoodsSkuRequest.php +++ b/app/Http/Requests/GoodsSkuRequest.php @@ -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', diff --git a/resources/lang/zh-CN/permission.php b/resources/lang/zh-CN/permission.php index d000062..44c75aa 100644 --- a/resources/lang/zh-CN/permission.php +++ b/resources/lang/zh-CN/permission.php @@ -52,6 +52,11 @@ return [ 'name' => '字段更新', 'parent_id' => 2, ], + 'goods_sku.orders_num' => [ + 'id' => 28, + 'name' => '店铺订单', + 'parent_id' => 2, + ], 'GOODS_TYPE' => [ 'id' => 3, 'name' => '商品种类', diff --git a/routes/api.php b/routes/api.php index b322c4f..19fbfe3 100644 --- a/routes/api.php +++ b/routes/api.php @@ -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');