create order

This commit is contained in:
Edward Yang 2022-07-04 21:13:15 +08:00
parent a1ee85ac5c
commit 859768f42b
5 changed files with 110 additions and 10 deletions

View File

@ -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序列化结果
*/

View File

@ -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',
];
}

View File

@ -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;
}
}

View File

@ -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);
}
}

View File

@ -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;
}