6
0
Fork 0
base
panliang 2022-09-08 16:41:07 +08:00
parent 580088a561
commit 560910dd7a
3 changed files with 49 additions and 35 deletions

View File

@ -46,22 +46,22 @@ class OrderController extends Controller
*/
public function store(Request $request)
{
$isQuick = $request->filled('product');
$rules = $isQuick ? [
'product.sku_id' => ['bail', 'required', 'int'],
'product.quantity' => ['bail', 'required', 'int', 'min:1'],
$validated = $request->validate(array_merge([
'shipping_address_id' => ['bail', 'nullable', 'int'],
'coupon_id' => ['bail', 'nullable', 'int'],
'note' => ['bail', 'nullable', 'string', 'max:255'],
] : [
'shopping_cart' => ['bail', 'required', 'array'],
'shipping_address_id' => ['bail', 'required', 'int'],
'coupon_id' => ['bail', 'nullable', 'int'],
'note' => ['bail', 'nullable', 'string', 'max:255'],
];
$input = $request->validate($rules, [], [
], match (true) {
$request->filled('order_pre') => [
'order_pre' => ['bail','required', 'int'],
],
$request->filled('product') => [
'product.sku_id' => ['bail', 'required', 'int'],
'product.quantity' => ['bail', 'required', 'int', 'min:1'],
],
default => [
'shopping_cart' => ['bail', 'required', 'array'],
]
}), [], [
'product.sku_id' => '商品',
'product.quantity' => '数量',
'shopping_cart' => '购物车商品',
@ -69,31 +69,31 @@ class OrderController extends Controller
'coupon_id' => '优惠券',
'note' => '订单备注',
]);
$user = $request->user();
try {
$order = DB::transaction(function () use ($isQuick, $user, $input) {
$order = DB::transaction(function () use ($user, $validated, $request) {
$orderService = new OrderService();
if ($isQuick) {
return $orderService->createQuickOrder(
return match (true) {
$request->filled('order_pre') => $orderService->createOrderByPre($user, OrderPre::findOrFail($request->input('order_pre')), $request->input('coupon_id')),
$request->filled('product') => $orderService->createQuickOrder(
$user,
$input['product']['sku_id'],
$input['product']['quantity'],
$input['shipping_address_id'] ?? null,
$input['coupon_id'] ?? null,
$input['note'] ?? null,
);
}
return $orderService->createShoppingCartOrder(
$user,
$input['shopping_cart'],
$input['shipping_address_id'] ?? null,
$input['coupon_id'] ?? null,
$input['note'] ?? null,
);
$validated['product']['sku_id'],
$validated['product']['quantity'],
$validated['shipping_address_id'] ?? null,
$validated['coupon_id'] ?? null,
$validated['note'] ?? null,
),
default => $orderService->createShoppingCartOrder(
$user,
$validated['shopping_cart'],
$validated['shipping_address_id'] ?? null,
$validated['coupon_id'] ?? null,
$validated['note'] ?? null,
),
};
});
} catch (QueryException $e) {
if (strpos($e->getMessage(), 'Numeric value out of range') !== false) {

View File

@ -3,6 +3,8 @@
namespace App\Endpoint\Api\Http\Controllers\Order;
use App\Endpoint\Api\Http\Controllers\Controller;
use App\Models\OrderPre;
use App\Models\ProductSku;
use App\Services\OrderService;
use Illuminate\Http\Request;
@ -46,6 +48,18 @@ class OrderVerifyController extends Controller
$user = $request->user();
if ($request->filled('order_pre')) {
$pre = OrderPre::find($request->input('order_pre'));
$products = [];
foreach($pre->products as $item) {
array_push($products, [
'sku' => ProductSku::findOrFail($item['sku_id']),
'quantity' => $item['quantity']
]);
}
return response()->json($orderService->verifyOrder($user, $products, $request->input('shipping_address_id'), $request->input('coupon_id'), null));
}
return response()->json(
$isQuick
? $orderService->verifyQuickOrder(

View File

@ -174,7 +174,7 @@ class OrderService
* 添加店铺订单
*
*/
public function createOrderByPre(User $user, OrderPre $order_pre)
public function createOrderByPre(User $user, OrderPre $order_pre, $coupon_id = null)
{
$products = [];
foreach($order_pre->products as $item) {
@ -184,7 +184,7 @@ class OrderService
]);
}
$coupon_id = data_get($order_pre, 'others.coupon_id');
$coupon_id = $coupon_id ?: data_get($order_pre, 'others.coupon_id');
$note = data_get($order_pre, 'others.note');
// 优惠券
@ -653,7 +653,7 @@ class OrderService
* @param int|null $bargainOrderId
* @return array
*/
protected function verifyOrder(User $user, array $products, ?int $shippingAddressId = null, ?int $couponId = null, ?int $bargainOrderId = null): array
public function verifyOrder(User $user, array $products, ?int $shippingAddressId = null, ?int $couponId = null, ?int $bargainOrderId = null): array
{
// 获取收货地址
$shippingAddress = $this->getShippingAddress($user, $shippingAddressId);