diff --git a/beike/Admin/Http/Controllers/OrderController.php b/beike/Admin/Http/Controllers/OrderController.php
index 29754b6d..cf491843 100644
--- a/beike/Admin/Http/Controllers/OrderController.php
+++ b/beike/Admin/Http/Controllers/OrderController.php
@@ -12,6 +12,7 @@
namespace Beike\Admin\Http\Controllers;
use Beike\Models\Order;
+use Beike\Services\ShipmentService;
use Illuminate\Http\Request;
use Beike\Repositories\OrderRepo;
use Beike\Services\StateMachineService;
@@ -67,7 +68,7 @@ class OrderController extends Controller
*/
public function show(Request $request, Order $order)
{
- $order->load(['orderTotals', 'orderHistories']);
+ $order->load(['orderTotals', 'orderHistories', 'orderShipments']);
$data = [
'order' => $order,
'statuses' => StateMachineService::getInstance($order)->nextBackendStatuses()
@@ -89,8 +90,11 @@ class OrderController extends Controller
$status = $request->get('status');
$comment = $request->get('comment');
$notify = $request->get('notify');
+
+ $shipment = ShipmentService::handleShipment(\request('express_code'), \request('express_number'));
+
$stateMachine = new StateMachineService($order);
- $stateMachine->changeStatus($status, $comment, $notify);
+ $stateMachine->setShipment($shipment)->changeStatus($status, $comment, $notify);
return json_success(trans('common.updated_success'));
}
}
diff --git a/beike/Models/Order.php b/beike/Models/Order.php
index 8a8d96a2..42c24c76 100644
--- a/beike/Models/Order.php
+++ b/beike/Models/Order.php
@@ -20,9 +20,9 @@ class Order extends Base
'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',
+ 'shipping_zipcode', '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',
+ 'payment_address_1', 'payment_address_2', 'payment_zipcode',
];
protected $appends = ['status_format', 'total_format'];
@@ -42,6 +42,11 @@ class Order extends Base
return $this->hasMany(OrderHistory::class);
}
+ public function orderShipments(): HasMany
+ {
+ return $this->hasMany(OrderShipment::class);
+ }
+
public function getStatusFormatAttribute()
{
return trans('order.' . $this->status);
diff --git a/beike/Models/OrderShipment.php b/beike/Models/OrderShipment.php
new file mode 100644
index 00000000..164e29ac
--- /dev/null
+++ b/beike/Models/OrderShipment.php
@@ -0,0 +1,20 @@
+
+ * @created 2022-12-16 18:37:24
+ * @modified 2022-12-16 18:37:24
+ */
+
+namespace Beike\Models;
+
+
+class OrderShipment extends Base
+{
+ protected $fillable = [
+ 'order_id', 'express_code', 'express_company', 'express_number'
+ ];
+}
diff --git a/beike/Repositories/OrderRepo.php b/beike/Repositories/OrderRepo.php
index ec488743..3d250fcb 100644
--- a/beike/Repositories/OrderRepo.php
+++ b/beike/Repositories/OrderRepo.php
@@ -215,6 +215,7 @@ class OrderRepo
'shipping_city' => $shippingAddress->city,
'shipping_address_1' => $shippingAddress->address_1,
'shipping_address_2' => $shippingAddress->address_2,
+ 'shipping_zipcode' => $shippingAddress->zipcode,
'payment_method_code' => $paymentMethodCode,
'payment_method_name' => trans($paymentMethodCode),
'payment_customer_name' => $paymentAddress->name,
@@ -225,6 +226,7 @@ class OrderRepo
'payment_city' => $paymentAddress->city,
'payment_address_1' => $paymentAddress->address_1,
'payment_address_2' => $paymentAddress->address_2,
+ 'payment_zipcode' => $paymentAddress->zipcode,
]);
$order->saveOrFail();
diff --git a/beike/Services/ShipmentService.php b/beike/Services/ShipmentService.php
new file mode 100644
index 00000000..a1a969c5
--- /dev/null
+++ b/beike/Services/ShipmentService.php
@@ -0,0 +1,58 @@
+
+ * @created 2022-12-20 17:23:51
+ * @modified 2022-12-20 17:23:51
+ */
+
+namespace Beike\Services;
+
+
+class ShipmentService
+{
+ /**
+ * 处理订单运单数据
+ *
+ * @param $expressCode
+ * @param $expressNumber
+ * @return array
+ */
+ public static function handleShipment($expressCode, $expressNumber): array
+ {
+ if (empty($expressCode) || empty($expressNumber)) {
+ return [];
+ }
+
+ $expressCompany = self::handleExpressCompany($expressCode);
+ if (empty($expressCompany)) {
+ return [];
+ }
+
+ return [
+ 'express_code' => $expressCode,
+ 'express_company' => $expressCompany,
+ 'express_number' => $expressNumber,
+ ];
+ }
+
+
+ /**
+ * 根据快递公司编号获取快递公司名称
+ *
+ * @param $expressCode
+ * @return mixed
+ */
+ public static function handleExpressCompany($expressCode): mixed
+ {
+ $expressCompanies = system_setting('base.express_company');
+ if (empty($expressCompanies)) {
+ return '';
+ }
+ $company = collect($expressCompanies)->where('code', $expressCode)->first();
+ return $company ? $company['name'] ?? '' : '';
+ }
+}
diff --git a/beike/Services/StateMachineService.php b/beike/Services/StateMachineService.php
index ca9bccb0..7efff4ae 100644
--- a/beike/Services/StateMachineService.php
+++ b/beike/Services/StateMachineService.php
@@ -14,6 +14,7 @@ namespace Beike\Services;
use Throwable;
use Beike\Models\Order;
use Beike\Models\OrderHistory;
+use Beike\Models\OrderShipment;
class StateMachineService
{
@@ -21,6 +22,7 @@ class StateMachineService
private int $orderId;
private string $comment;
private bool $notify;
+ private array $shipment;
const CREATED = 'created'; // 已创建
const UNPAID = 'unpaid'; // 待支付
@@ -48,7 +50,7 @@ class StateMachineService
],
self::PAID => [
self::CANCELLED => ['updateStatus', 'addHistory'],
- self::SHIPPED => ['updateStatus', 'addHistory'],
+ self::SHIPPED => ['updateStatus', 'addHistory', 'addShipment'],
self::COMPLETED => ['updateStatus', 'addHistory']
],
self::SHIPPED => [
@@ -89,6 +91,18 @@ class StateMachineService
return $this;
}
+ /**
+ * 设置发货信息
+ *
+ * @param array $shipment
+ * @return $this
+ */
+ public function setShipment(array $shipment = []): self
+ {
+ $this->shipment = $shipment;
+ return $this;
+ }
+
/**
* 获取所有订单状态列表
@@ -254,6 +268,27 @@ class StateMachineService
}
+ /**
+ * 添加发货单号
+ */
+ private function addShipment($oldCode, $newCode)
+ {
+ $shipment = $this->shipment;
+ $expressCode = $shipment['express_code'] ?? '';
+ $expressCompany = $shipment['express_company'] ?? '';
+ $expressNumber = $shipment['express_number'] ?? '';
+ if ($expressCode && $expressCompany && $expressNumber) {
+ $orderShipment = new OrderShipment([
+ 'order_id' => $this->orderId,
+ 'express_code' => $expressCode,
+ 'express_company' => $expressCompany,
+ 'express_number' => $expressNumber,
+ ]);
+ $orderShipment->saveOrFail();
+ }
+ }
+
+
/**
* 恢复库存
*/
diff --git a/database/migrations/2022_12_16_095559_create_order_shipments.php b/database/migrations/2022_12_16_095559_create_order_shipments.php
new file mode 100644
index 00000000..2c5df4b4
--- /dev/null
+++ b/database/migrations/2022_12_16_095559_create_order_shipments.php
@@ -0,0 +1,43 @@
+id();
+ $table->integer('order_id')->comment('订单ID')->index('order_id');
+ $table->string('express_code')->comment('快递公司编码');
+ $table->string('express_company')->comment('快递公司名称');
+ $table->string('express_number')->comment('运单号');
+ $table->timestamps();
+ });
+ }
+
+ if (!Schema::hasColumn('orders', 'shipping_zipcode')) {
+ Schema::table('orders', function (Blueprint $table) {
+ $table->string('shipping_zipcode')->after('shipping_address_2')->comment('配送地址邮编');
+ $table->string('payment_zipcode')->after('payment_address_2')->comment('发票地址邮编');
+ });
+ }
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ Schema::dropIfExists('order_shipments');
+ }
+};
diff --git a/resources/beike/admin/css/_global.scss b/resources/beike/admin/css/_global.scss
index 676ba64a..a13e09d5 100644
--- a/resources/beike/admin/css/_global.scss
+++ b/resources/beike/admin/css/_global.scss
@@ -336,6 +336,28 @@ table.table thead th, .fw-bold, h1,h2,h3, h4, h5, h6, b, strong, .card .card-hea
}
+// 处理 el-form 表单在非中文情况下的 显示问题
+@media (min-width: 768px) {
+ body:not(.zh_cn) {
+ .el-form-item {
+ display: flex;
+ align-items: center;
+
+ .el-form-item__label {
+ line-height: 1.3;
+ font-size: 13px;
+ & + .el-form-item__content {
+ margin-left: 0 !important;
+ }
+ }
+
+ .el-form-item__content {
+ flex: 1;
+ }
+ }
+ }
+}
+
@media (max-width: 768px) {
.wp-200.text-end {
text-align: left !important;
diff --git a/resources/beike/admin/views/layouts/master.blade.php b/resources/beike/admin/views/layouts/master.blade.php
index bf24fbe7..8224e526 100644
--- a/resources/beike/admin/views/layouts/master.blade.php
+++ b/resources/beike/admin/views/layouts/master.blade.php
@@ -26,7 +26,7 @@
{{--
| {{ __('order.express_company') }} | +{{ __('order.express_number') }} | +{{ __('order.history_created_at') }} | +
|---|---|---|
| {{ $ship->express_company }} | +{{ $ship->express_number }} | +{{ $ship->created_at }} | +
| {{ __('order.express_company') }} | Code | + + |
|---|---|---|
| + | + | + |
| + | + | |
| {{ __('order.shipping_address') }} | +{{ __('order.payment_address') }} | +
|---|---|
|
+ {{ __('address.name') }}:{{ $order->shipping_customer_name }} ({{ $order->shipping_telephone }})
+
+ {{ __('address.address') }}:
+ {{ $order->shipping_address_1 }}
+ {{ $order->shipping_address_2 }}
+ {{ $order->shipping_city }}
+ {{ $order->shipping_zone }}
+ {{ $order->shipping_country }}
+
+ {{ __('address.post_code') }}:{{ $order->shipping_zipcode }}
+ |
+
+ {{ __('address.name') }}:{{ $order->payment_customer_name }} ({{ $order->payment_telephone }})
+
+ {{ __('address.address') }}:
+ {{ $order->payment_address_1 }}
+ {{ $order->payment_address_2 }}
+ {{ $order->payment_city }}
+ {{ $order->payment_zone }}
+ {{ $order->payment_country }}
+
+ {{ __('address.post_code') }}:{{ $order->payment_zipcode }}
+ |
+
| {{ __('order.express_company') }} | +{{ __('order.express_number') }} | +{{ __('order.history_created_at') }} | +
|---|---|---|
| {{ $ship->express_company }} | +{{ $ship->express_number }} | +{{ $ship->created_at }} | +