create order
This commit is contained in:
parent
a1ee85ac5c
commit
859768f42b
|
|
@ -145,6 +145,7 @@ function image_resize($image, int $width = 100, int $height = 100)
|
|||
|
||||
/**
|
||||
* 当前语言ID
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
function current_language_id(): int
|
||||
|
|
@ -152,6 +153,16 @@ function current_language_id(): int
|
|||
return 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前货币
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
function current_currency_code(): string
|
||||
{
|
||||
return 'CNY';
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回json序列化结果
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -15,5 +15,13 @@ use Illuminate\Database\Eloquent\Model;
|
|||
|
||||
class Order extends Model
|
||||
{
|
||||
|
||||
protected $fillable = [
|
||||
'number', 'customer_id', 'customer_group_id', 'shipping_address_id', 'payment_address_id', 'customer_name',
|
||||
'email', 'calling_code', 'telephone', 'total', 'locale', 'currency_code', 'currency_value', 'ip', 'user_agent',
|
||||
'status', 'shipping_method_code', 'shipping_method_name', 'shipping_customer_name', 'shipping_calling_code',
|
||||
'shipping_telephone', 'shipping_country', 'shipping_zone', 'shipping_city', 'shipping_address_1',
|
||||
'shipping_address_2', 'payment_method_code', 'payment_method_name', 'payment_customer_name',
|
||||
'payment_calling_code', 'payment_telephone', 'payment_country', 'payment_zone', 'payment_city',
|
||||
'payment_address_1', 'payment_address_2',
|
||||
];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,21 +11,91 @@
|
|||
|
||||
namespace Beike\Repositories;
|
||||
|
||||
use Beike\Models\Customer;
|
||||
use Beike\Models\Order;
|
||||
use Carbon\Carbon;
|
||||
use http\Client;
|
||||
|
||||
class OrderRepo
|
||||
{
|
||||
/**
|
||||
* @param $data
|
||||
* @param array $data
|
||||
* @return Order
|
||||
* @throws \Throwable
|
||||
*/
|
||||
public static function createOrder($data): Order
|
||||
public static function create(array $data): Order
|
||||
{
|
||||
$order = new Order([
|
||||
$customer = $data['customer'] ?? null;
|
||||
$current = $data['checkout']['current'] ?? [];
|
||||
$carts = $data['checkout']['carts'] ?? [];
|
||||
$shippingAddressId = $current['shipping_address_id'] ?? 0;
|
||||
$paymentAddressId = $current['payment_address_id'] ?? 0;
|
||||
|
||||
$shippingAddress = AddressRepo::find($shippingAddressId);
|
||||
$paymentAddress = AddressRepo::find($paymentAddressId);
|
||||
|
||||
$shippingMethodCode = $data['shipping_method_code'] ?? '';
|
||||
$paymentMethodCode = $data['payment_method_code'] ?? '';
|
||||
|
||||
$order = new Order([
|
||||
'number' => self::generateOrderNumber(),
|
||||
'customer_id' => $customer->id,
|
||||
'customer_group_id' => $customer->customer_group_id,
|
||||
'shipping_address_id' => $shippingAddress->id,
|
||||
'payment_address_id' => $paymentAddress->id,
|
||||
'customer_name' => $customer->name,
|
||||
'email' => $customer->email,
|
||||
'calling_code' => $customer->calling_code ?? 0,
|
||||
'telephone' => $customer->telephone ?? '',
|
||||
'total' => $carts['amount'],
|
||||
'locale' => locale(),
|
||||
'currency_code' => current_currency_code(),
|
||||
'currency_value' => 1,
|
||||
'ip' => request()->getClientIp(),
|
||||
'user_agent' => request()->userAgent(),
|
||||
'status' => 'UNPAID',
|
||||
'shipping_method_code' => $shippingMethodCode,
|
||||
'shipping_method_name' => trans($shippingMethodCode),
|
||||
'shipping_customer_name' => $shippingAddress->name,
|
||||
'shipping_calling_code' => $shippingAddress->calling_code ?? 0,
|
||||
'shipping_telephone' => $shippingAddress->telephone ?? '',
|
||||
'shipping_country' => $shippingAddress->country->name ?? '',
|
||||
'shipping_zone' => $shippingAddress->zone,
|
||||
'shipping_city' => $shippingAddress->city,
|
||||
'shipping_address_1' => $shippingAddress->address_1,
|
||||
'shipping_address_2' => $shippingAddress->address_2,
|
||||
'payment_method_code' => $paymentMethodCode,
|
||||
'payment_method_name' => trans($paymentMethodCode),
|
||||
'payment_customer_name' => $paymentAddress->name,
|
||||
'payment_calling_code' => $paymentAddress->calling_code ?? 0,
|
||||
'payment_telephone' => $paymentAddress->telephone ?? '',
|
||||
'payment_country' => $paymentAddress->country->name ?? '',
|
||||
'payment_zone' => $paymentAddress->zone,
|
||||
'payment_city' => $paymentAddress->city,
|
||||
'payment_address_1' => $paymentAddress->address_1,
|
||||
'payment_address_2' => $paymentAddress->address_2,
|
||||
]);
|
||||
$order->saveOrFail();
|
||||
|
||||
// OrderProductRepo::create($order);
|
||||
// OrderHistoryRepo::create($order);
|
||||
|
||||
return $order;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 生成订单号
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public static function generateOrderNumber(): string
|
||||
{
|
||||
$orderNumber = Carbon::now()->format('Ymd') . rand(10000, 9999);
|
||||
$exist = Order::query()->where('number', $orderNumber)->exists();
|
||||
if ($exist) {
|
||||
return self::generateOrderNumber();
|
||||
}
|
||||
return $orderNumber;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@
|
|||
|
||||
namespace Beike\Shop\Http\Controllers;
|
||||
|
||||
use Beike\Models\Order;
|
||||
use Beike\Shop\Services\CheckoutService;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
|
|
@ -40,10 +41,12 @@ class CheckoutController extends Controller
|
|||
* 确认提交订单
|
||||
*
|
||||
* @param Request $request
|
||||
* @return array
|
||||
* @return Order
|
||||
* @throws \Throwable
|
||||
*/
|
||||
public function confirm(Request $request): array
|
||||
public function confirm(Request $request): Order
|
||||
{
|
||||
return (new CheckoutService)->confirm();
|
||||
$data = $request->all();
|
||||
return (new CheckoutService)->confirm($data);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,7 +12,9 @@
|
|||
namespace Beike\Shop\Services;
|
||||
|
||||
use Beike\Models\Cart;
|
||||
use Beike\Models\CartProduct;
|
||||
use Beike\Models\Customer;
|
||||
use Beike\Models\Order;
|
||||
use Beike\Repositories\CartRepo;
|
||||
use Beike\Repositories\OrderRepo;
|
||||
use Beike\Repositories\PluginRepo;
|
||||
|
|
@ -70,11 +72,17 @@ class CheckoutService
|
|||
|
||||
/**
|
||||
* 确认提交订单
|
||||
* @throws \Throwable
|
||||
*/
|
||||
public function confirm(): \Beike\Models\Order
|
||||
public function confirm($data): \Beike\Models\Order
|
||||
{
|
||||
$data = [];
|
||||
return OrderRepo::createOrder($data);
|
||||
$customer = current_customer();
|
||||
$data['customer'] = $customer;
|
||||
$data['checkout'] = self::checkoutData();
|
||||
$order = OrderRepo::create($data);
|
||||
// Notification::endmail();
|
||||
// Notification::sendsms();
|
||||
return $order;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue