From 8bc63ce9c7a480d992c6855958dab78439a47734 Mon Sep 17 00:00:00 2001
From: panliang <1163816051@qq.com>
Date: Sat, 8 Oct 2022 15:42:37 +0800
Subject: [PATCH] order
---
README.md | 13 +++++-
src/Http/Admin/OrderController.php | 7 ++-
src/Http/Api/OrderController.php | 69 +++++++++++++++++++++---------
src/OrderServiceProvider.php | 12 ++++++
4 files changed, 78 insertions(+), 23 deletions(-)
diff --git a/README.md b/README.md
index 4df62a0..850f255 100644
--- a/README.md
+++ b/README.md
@@ -20,7 +20,7 @@
## 权限
-````php
+```php
$permissions = [
'orders' => ['name' => '订单列表', 'curd' => ['index', 'show', 'destroy'], 'children' => [
'pay' => '支付订单',
@@ -30,8 +30,17 @@ $permissions = [
'price' => '订单改价',
]],
];
+```
-````
+## 菜单
+
+```php
+$menus = [
+ ['title' => '订单模块', 'icon' => 'feather icon-book', 'uri' => '', 'permission' => ['orders'], 'children' => [
+ ['title' => '订单管理', 'icon' => '', 'uri' => '/orders', 'permission' => 'orders.index'],
+ ]],
+];
+```
## 配置
diff --git a/src/Http/Admin/OrderController.php b/src/Http/Admin/OrderController.php
index 2a3d0fb..9d6d04a 100644
--- a/src/Http/Admin/OrderController.php
+++ b/src/Http/Admin/OrderController.php
@@ -64,7 +64,6 @@ class OrderController extends AdminController
});
$grid->column('sn')->copyable();
- $grid->column('merchant.name');
$grid->column('user.phone');
$grid->column('total_money');
$grid->column('order_status')->display(fn() => $this->status()->dot());
@@ -101,6 +100,12 @@ class OrderController extends AdminController
$show->width(6)->field('score_discount_money');
$show->width(6)->field('score_discount_amount');
});
+ if ($info->coupon_money > 0) {
+ $show->row(function (Show\Row $show) {
+ $show->width(6)->field('coupon_money')->as(fn ($v) => '-'.floatval($v).'')->unescape();
+ $show->width(6)->field('coupon.name', '优惠券');
+ });
+ }
$show->row(function (Show\Row $show) use ($info) {
$show->width(6)->field('pay_money')->as(function ($value) {
return ''.$value.'' . ($this->discount_price > 0 ? '(-'.$this->discount_price.')' : '');
diff --git a/src/Http/Api/OrderController.php b/src/Http/Api/OrderController.php
index 7b166cb..68fd06e 100644
--- a/src/Http/Api/OrderController.php
+++ b/src/Http/Api/OrderController.php
@@ -6,6 +6,8 @@ use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Validation\Rule;
+use Peidikeji\Coupon\CouponService;
+use Peidikeji\Coupon\Http\Resources\UserCouponResource;
use Peidikeji\Order\Enums\PayStatus;
use Peidikeji\Order\Enums\PayWay;
use Peidikeji\Order\Enums\ShipStatus;
@@ -14,10 +16,13 @@ use Peidikeji\Order\Events\OrderCanceled;
use Peidikeji\Order\Events\OrderCreated;
use Peidikeji\Order\Events\OrderPaid;
use Peidikeji\Order\Events\OrderReceived;
+use Peidikeji\Order\Exceptions\OrderException;
use Peidikeji\Order\Http\Resources\OrderResource;
use Peidikeji\Order\Http\Resources\OrderShipResouce;
use Peidikeji\Order\OrderService;
use Peidikeji\Order\OrderStore;
+use Peidikeji\Region\Models\Region;
+use Peidikeji\User\Models\UserAddress;
class OrderController extends Controller
{
@@ -51,12 +56,19 @@ class OrderController extends Controller
$service->goods($goods);
// 收货地址
- $address = $request->input('address');
+ $address = $this->getAddress();
+ $service->ship(ShipWay::Express->value, $address);
// 优惠券
- // $coupons = UserCoupon::where('user_id', $user->id)->effective()->get();
-
- $service->ship(ShipWay::Express->value, $this->formatAddress($address));
+ $couponList = $user->coupons()->effective()->get();
+ $coupons = CouponService::make()->availableList($couponList, $service->orderGoodsList);
+ if ($request->filled('coupon_id')) {
+ $coupon = $couponList->firstWhere('id', $request->input('coupon_id'));
+ if (!$coupon) {
+ throw new OrderException('优惠券不存在或已过期');
+ }
+ $service->coupon($coupon);
+ }
$score = $request->input('score');
$userScore = $user->balance;
@@ -81,11 +93,11 @@ class OrderController extends Controller
'price' => [
'goods' => floatval($goodsList->sum('money')),
'ship' => $service->ship['money'],
- 'coupon' => 0,
+ 'coupon' => $service->coupon['money'],
'score' => $service->score['money'],
'total' => $payMoney,
],
- 'coupons' => []
+ 'coupons' => UserCouponResource::collection($coupons),
]);
}
@@ -106,18 +118,8 @@ class OrderController extends Controller
}
$store->goods($goods);
- $address = null;
- if ($request->filled('address_id')) {
- $address = $user->addresses()->find($request->input('address_id'));
- if (!$address) {
- return $this->error('收货地址不存在');
- }
- }
- if (!$address) {
- $address = $request->input('address');
- }
-
- $store->ship($request->input('ship_way', ShipWay::None->value), $this->formatAddress($address));
+ $address = $this->getAddress();
+ $store->ship($request->input('ship_way', ShipWay::None->value), $address);
$store->score($request->input('score', 0));
@@ -260,8 +262,35 @@ class OrderController extends Controller
return $goods;
}
- protected function formatAddress($userAddress)
+ protected function getAddress()
{
- return $userAddress;
+ $address = [];
+ $request = request();
+ if ($request->filled('address_id')) {
+ $user = auth('api')->user();
+ $userAddress = $user->addresses()->find($request->input('address_id'));
+ if (!$address) {
+ throw new OrderException('收货地址不存在');
+ }
+ $address = [
+ 'name' => $userAddress->contact_name,
+ 'phone' => $userAddress->phone,
+ 'region' => [$userAddress->province?->name, $userAddress->city?->name, $userAddress->area?->name],
+ 'zone' => [$userAddress->province_id, $userAddress->city_id, $userAddress->area_id],
+ 'address' => $userAddress->address,
+ 'address_id' => $userAddress->id,
+ ];
+ } else {
+ $address = $request->input('address');
+ $region = data_get($address, 'region');
+ if (! $region || count($region) === 0) {
+ throw new OrderException('收货地址格式不正确');
+ }
+ $area = Region::where('name', $region[2])->where('level', 3)->firstOrFail();
+ $city = Region::findOrFail($area->parent_id);
+ $address['zone'] = [$city->parent_id, $area->parent_id, $area->id];
+ }
+
+ return $address;
}
}
diff --git a/src/OrderServiceProvider.php b/src/OrderServiceProvider.php
index 2919029..ebfe652 100644
--- a/src/OrderServiceProvider.php
+++ b/src/OrderServiceProvider.php
@@ -11,6 +11,8 @@ use Peidikeji\Order\Events\OrderCreated;
use Peidikeji\Order\Listeners\OrderUseScore;
use Peidikeji\Order\Listeners\UpdateGoodsSoldCount;
use Peidikeji\Order\Listeners\UpdateGoodsStock;
+use Dcat\Admin\Admin;
+use Dcat\Admin\Layout\Menu;
class OrderServiceProvider extends ServiceProvider
{
@@ -43,5 +45,15 @@ class OrderServiceProvider extends ServiceProvider
$this->loadMigrationsFrom(__DIR__.'/../database/');
$this->loadTranslationsFrom(__DIR__.'/../lang', 'dcat-admin-order');
+
+ Admin::menu(function (Menu $menu) {
+ // ['title' => '订单模块', 'icon' => 'feather icon-book', 'uri' => '', 'permission' => ['orders'], 'children' => [
+ // ['title' => '订单管理', 'icon' => '', 'uri' => '/orders', 'permission' => 'orders.index'],
+ // ]],
+ $menu->add([
+ ['id' => 1, 'parent_id' => 0, 'title' => '订单模块', 'icon' => 'feather icon-book', 'uri' => '', 'permission' => ['orders']],
+ ['id' => 2, 'parent_id' => 1, 'title' => '订单管理', 'icon' => '', 'uri' => '/orders', 'permission' => 'orders.index']
+ ]);
+ });
}
}