From 8b49e0d263ef15586899774e27961336dbea4721 Mon Sep 17 00:00:00 2001 From: vine_liutk <961510893@qq.com> Date: Sat, 18 Dec 2021 16:56:25 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BD=9C=E5=BA=9F=E8=B4=A7?= =?UTF-8?q?=E8=BF=90=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Admin/Actions/Grid/CouponTaskStart.php | 6 +- app/Admin/Actions/Grid/OrderPackageFailed.php | 4 +- app/Admin/Actions/Show/OrderPay.php | 4 +- .../Controllers/OrderPackageController.php | 16 ++- app/Admin/Forms/OrderConsigneeInfo.php | 4 +- app/Admin/Forms/OrderPackage.php | 6 +- app/Admin/Forms/OrderReduce.php | 4 +- app/Admin/Forms/OrderRemark.php | 4 +- ...derService.php => OrderPackageService.php} | 122 ++++++------------ app/Admin/Services/OrderService.php | 90 +++++++++++++ ...ouponService.php => SendCouponService.php} | 2 +- app/Models/OrderProduct.php | 27 +++- 12 files changed, 185 insertions(+), 104 deletions(-) rename app/Admin/Services/{AdminOrderService.php => OrderPackageService.php} (61%) create mode 100644 app/Admin/Services/OrderService.php rename app/Admin/Services/{AdminSendCouponService.php => SendCouponService.php} (97%) diff --git a/app/Admin/Actions/Grid/CouponTaskStart.php b/app/Admin/Actions/Grid/CouponTaskStart.php index cd77e659..d82132c9 100644 --- a/app/Admin/Actions/Grid/CouponTaskStart.php +++ b/app/Admin/Actions/Grid/CouponTaskStart.php @@ -2,7 +2,7 @@ namespace App\Admin\Actions\Grid; -use App\Admin\Services\AdminSendCouponService; +use App\Admin\Services\SendCouponService; use Dcat\Admin\Actions\Response; use Dcat\Admin\Grid\RowAction; use Illuminate\Http\Request; @@ -46,8 +46,8 @@ class CouponTaskStart extends RowAction { try { DB::beginTransaction(); - $adminSendCouponService = new AdminSendCouponService(); - $adminSendCouponService->startTaskById($this->getKey()); + $SendCouponService = new SendCouponService(); + $SendCouponService->startTaskById($this->getKey()); DB::commit(); } catch (Throwable $th) { DB::rollBack(); diff --git a/app/Admin/Actions/Grid/OrderPackageFailed.php b/app/Admin/Actions/Grid/OrderPackageFailed.php index 5012bf76..ec5d187b 100644 --- a/app/Admin/Actions/Grid/OrderPackageFailed.php +++ b/app/Admin/Actions/Grid/OrderPackageFailed.php @@ -2,6 +2,7 @@ namespace App\Admin\Actions\Grid; +use App\Admin\Services\OrderPackageService; use App\Models\OrderPackage; use Dcat\Admin\Grid\RowAction; use Illuminate\Http\Request; @@ -46,7 +47,8 @@ class OrderPackageFailed extends RowAction $package = OrderPackage::findOrFail($this->getKey()); try { DB::beginTransaction(); - $user->enable(); + $packageService = new OrderPackageService(); + $packageService->failPackage($package); DB::commit(); } catch (Throwable $th) { DB::rollBack(); diff --git a/app/Admin/Actions/Show/OrderPay.php b/app/Admin/Actions/Show/OrderPay.php index 6f9529b1..f03f541a 100644 --- a/app/Admin/Actions/Show/OrderPay.php +++ b/app/Admin/Actions/Show/OrderPay.php @@ -2,7 +2,7 @@ namespace App\Admin\Actions\Show; -use App\Admin\Services\AdminOrderService; +use App\Admin\Services\OrderService; use App\Models\Order; use Dcat\Admin\Show\AbstractTool; use Illuminate\Contracts\Auth\Authenticatable; @@ -48,7 +48,7 @@ class OrderPay extends AbstractTool // 获取主键 $key = $this->getKey(); - $orderService = new AdminOrderService(); + $orderService = new OrderService(); $order = Order::where('status', Order::STATUS_PENDING)->findOrFail($key); try { DB::beginTransaction(); diff --git a/app/Admin/Controllers/OrderPackageController.php b/app/Admin/Controllers/OrderPackageController.php index fac6f721..3dc2df04 100644 --- a/app/Admin/Controllers/OrderPackageController.php +++ b/app/Admin/Controllers/OrderPackageController.php @@ -2,6 +2,7 @@ namespace App\Admin\Controllers; +use App\Admin\Actions\Grid\OrderPackageFailed; use App\Admin\Renderable\PackageProductSimpleTable; use App\Admin\Repositories\OrderPackage; use App\Exceptions\BizException; @@ -29,15 +30,21 @@ class OrderPackageController extends AdminController $grid->column('order.sn'); $grid->column('order.consignee_name'); $grid->column('order.consignee_telephone'); - $grid->column('order.consignee_zone'); - $grid->column('order.consignee_address'); + $grid->column('address', '收货地址')->display(function () { + return $this->order->consignee_zone.$this->order->consignee_address; + }); + // $grid->column('order.consignee_zone'); + // $grid->column('order.consignee_address'); $grid->column('packageProduct')->display('包裹商品')->modal(function ($modal) { $modal->title('商品'); return PackageProductSimpleTable::make(['id'=>$this->id]); })->setHeaderAttributes(['style' => 'color:#5b69bc']); $grid->column('shipping_company'); $grid->column('shipping_number'); - $grid->column('is_failed')->bool(); + $grid->column('is_failed', '正常')->bool([ + 0=>true, + 1=>false, + ]); $grid->column('status')->using([ OrderPackageModel::STATUS_WAIT => '揽收', OrderPackageModel::STATUS_ONTHEWAY =>'途中', @@ -73,6 +80,9 @@ class OrderPackageController extends AdminController $grid->actions(function (Grid\Displayers\Actions $actions) { $actions->disableDelete(Admin::user()->cannot('dcat.admin.order_packages.destroy')); $actions->disableQuickEdit(Admin::user()->cannot('dcat.admin.order_packages.edit')); + if (!in_array($actions->row->status, [OrderPackageModel::STATUS_CHECK, OrderPackageModel::STATUS_AUTOCHECK])) { + $actions->append(new OrderPackageFailed()); + } }); /** 查询 **/ diff --git a/app/Admin/Forms/OrderConsigneeInfo.php b/app/Admin/Forms/OrderConsigneeInfo.php index b90c4608..27acf87f 100644 --- a/app/Admin/Forms/OrderConsigneeInfo.php +++ b/app/Admin/Forms/OrderConsigneeInfo.php @@ -2,7 +2,7 @@ namespace App\Admin\Forms; -use App\Admin\Services\AdminOrderService; +use App\Admin\Services\OrderService; use App\Exceptions\BizException; use App\Models\Order; use Dcat\Admin\Contracts\LazyRenderable; @@ -38,7 +38,7 @@ class OrderConsigneeInfo extends Form implements LazyRenderable { $orderId = $this->payload['id'] ?? 0; $order = Order::findOrFail($orderId); - $orderService = new AdminOrderService(); + $orderService = new OrderService(); try { DB::beginTransaction(); $orderService->adminEditConsignee($order, $input); diff --git a/app/Admin/Forms/OrderPackage.php b/app/Admin/Forms/OrderPackage.php index db32bec2..ad89d0d7 100644 --- a/app/Admin/Forms/OrderPackage.php +++ b/app/Admin/Forms/OrderPackage.php @@ -2,7 +2,7 @@ namespace App\Admin\Forms; -use App\Admin\Services\AdminOrderService; +use App\Admin\Services\OrderPackageService; use App\Exceptions\BizException; use App\Models\Order; use Dcat\Admin\Contracts\LazyRenderable; @@ -41,8 +41,8 @@ class OrderPackage extends Form implements LazyRenderable $order = Order::findOrFail($orderId); try { DB::beginTransaction(); - $orderService = new AdminOrderService(); - $orderService->createPackage($order, $input); + $orderPackageService = new OrderPackageService(); + $orderPackageService->createPackage($order, $input); DB::commit(); } catch (BizException $e) { DB::rollBack(); diff --git a/app/Admin/Forms/OrderReduce.php b/app/Admin/Forms/OrderReduce.php index db4a7a24..fa9c9897 100644 --- a/app/Admin/Forms/OrderReduce.php +++ b/app/Admin/Forms/OrderReduce.php @@ -2,7 +2,7 @@ namespace App\Admin\Forms; -use App\Admin\Services\AdminOrderService; +use App\Admin\Services\OrderService; use App\Exceptions\BizException; use App\Models\Order; use Dcat\Admin\Admin; @@ -47,7 +47,7 @@ class OrderReduce extends Form implements LazyRenderable if ($reduceAmount == $order->total_amount) { throw new BizException('调整价格和订单原价格一致,无需调整'); } - $orderService = new AdminOrderService(); + $orderService = new OrderService(); $reduced = $order->total_amount-$reduceAmount; //判断是否在当前操作人调价权限范围内 diff --git a/app/Admin/Forms/OrderRemark.php b/app/Admin/Forms/OrderRemark.php index 805701ae..2419045d 100644 --- a/app/Admin/Forms/OrderRemark.php +++ b/app/Admin/Forms/OrderRemark.php @@ -2,7 +2,7 @@ namespace App\Admin\Forms; -use App\Admin\Services\AdminOrderService; +use App\Admin\Services\OrderService; use App\Exceptions\BizException; use App\Models\Order; use Dcat\Admin\Contracts\LazyRenderable; @@ -40,7 +40,7 @@ class OrderRemark extends Form implements LazyRenderable $order = Order::findOrFail($orderId); $remark = $input['remark']??''; - $orderService = new AdminOrderService(); + $orderService = new OrderService(); try { DB::beginTransaction(); $orderService->adminRemark($order, $remark); diff --git a/app/Admin/Services/AdminOrderService.php b/app/Admin/Services/OrderPackageService.php similarity index 61% rename from app/Admin/Services/AdminOrderService.php rename to app/Admin/Services/OrderPackageService.php index 96e2c2df..2bec965b 100644 --- a/app/Admin/Services/AdminOrderService.php +++ b/app/Admin/Services/OrderPackageService.php @@ -4,95 +4,14 @@ namespace App\Admin\Services; use App\Exceptions\BizException; use App\Models\Order; -use App\Models\OrderLog; use App\Models\OrderPackage; use App\Models\OrderPackageProduct; use App\Models\OrderProduct; use App\Services\Kuaidi100Service; use Illuminate\Support\Arr; -class AdminOrderService +class OrderPackageService { - /** - * 订单调整价格 - * - * @return void - */ - public function adminReduceOrder(Order $order, int $reduceAmount) - { - if ($order->isPending()) { - $res = $order->where('updated_at', $order->updated_at)->update([ - 'reduced_amount' => $order->total_amount - $reduceAmount + $order->reduced_amount, - 'total_amount' => $reduceAmount, - ]); - if ($res === 0) { - throw new BizException('订单已发生改变'); - } - OrderLog::create([ - 'order_id'=>$order->id, - 'content'=> '调整订单支付价格为:¥'.bcdiv($reduceAmount, 100, 2), - ]); - } - } - - /** - * 后台支付订单 - * - * @param Order $order - * @return void - */ - public function adminPay(Order $order) - { - if ($order->isPending()) { - //操作订单状态-需要调整为统一支付方法 - $order->update([ - 'status' => Order::STATUS_PAID, - ]); - - OrderLog::create([ - 'order_id'=>$order->id, - 'content'=> '改变订单状态为【已支付】', - ]); - } - } - - /** - * 添加后台备注 - * - * @param Order $order - * @param string $remark - * @return void - */ - public function adminRemark(Order $order, string $remark) - { - //操作订单状态-需要调整为统一支付方法 - $order->update([ - 'remark' => $remark, - ]); - - OrderLog::create([ - 'order_id'=>$order->id, - 'content'=> '修改订单备注:'.$remark, - ]); - } - - /** - * 修改订单收货信息 - * - * @param Order $order - * @param array $params - * @return void - */ - public function adminEditConsignee(Order $order, array $params) - { - $oldOrderConsignee = $order->consignee_name.','.$order->consignee_telephone.','.$order->consignee_zone.$order->consignee_address; - $order->update($params); - OrderLog::create([ - 'order_id'=>$order->id, - 'content'=> '修改订单收货信息原收货信息:'.$oldOrderConsignee, - ]); - } - /** * 创建订单发货单 * @@ -102,6 +21,10 @@ class AdminOrderService { //合并同样商品,并检验是否能发货 $packageProducts = []; + //待发货,发货中的可以发货 + if (!($order->isWaitShipping() || $order->isShipping())) { + throw new BizException('订单状态异常,无法发货'); + } if (count($params['packages']) <= 0) { throw new BizException('请选择发货商品'); } @@ -166,4 +89,39 @@ class AdminOrderService ]); } } + + /** + * 作废发货单 + * + * @param OrderPackage $package + * @return void + */ + public function failPackage(OrderPackage $package) + { + //如果订单完成了,不能作废货运单 + if ($package->order->isCompleted()) { + throw new BizException('订单已完成,无法作废该货运单'); + } + + $changeQuantity = []; + foreach ($package->packageProducts as $packageProduct) { + if (isset($changeQuantity[$packageProduct->order_product_id])) { + $changeQuantity[$packageProduct->order_product_id] += $packageProduct->quantity; + } else { + $changeQuantity[$packageProduct->order_product_id] = $packageProduct->quantity; + } + } + + //作废货运单,恢复订单商品发货数量 + foreach ($package->orderProducts as $orderProduct) { + $orderProduct->increment('remain_quantity', $changeQuantity[$orderProduct->id]); + } + + //更新订单状态:如果发货完成,则恢复为发货中 + if ($package->order->isShipped()) { + $package->order()->update([ + 'shipping_state'=>Order::SHIPPING_STATE_PROCESSING, + ]); + } + } } diff --git a/app/Admin/Services/OrderService.php b/app/Admin/Services/OrderService.php new file mode 100644 index 00000000..63a91af5 --- /dev/null +++ b/app/Admin/Services/OrderService.php @@ -0,0 +1,90 @@ +isPending()) { + $res = $order->where('updated_at', $order->updated_at)->update([ + 'reduced_amount' => $order->total_amount - $reduceAmount + $order->reduced_amount, + 'total_amount' => $reduceAmount, + ]); + if ($res === 0) { + throw new BizException('订单已发生改变'); + } + OrderLog::create([ + 'order_id'=>$order->id, + 'content'=> '调整订单支付价格为:¥'.bcdiv($reduceAmount, 100, 2), + ]); + } + } + + /** + * 后台支付订单 + * + * @param Order $order + * @return void + */ + public function adminPay(Order $order) + { + if ($order->isPending()) { + //操作订单状态-需要调整为统一支付方法 + $order->update([ + 'status' => Order::STATUS_PAID, + ]); + + OrderLog::create([ + 'order_id'=>$order->id, + 'content'=> '改变订单状态为【已支付】', + ]); + } + } + + /** + * 添加后台备注 + * + * @param Order $order + * @param string $remark + * @return void + */ + public function adminRemark(Order $order, string $remark) + { + //操作订单状态-需要调整为统一支付方法 + $order->update([ + 'remark' => $remark, + ]); + + OrderLog::create([ + 'order_id'=>$order->id, + 'content'=> '修改订单备注:'.$remark, + ]); + } + + /** + * 修改订单收货信息 + * + * @param Order $order + * @param array $params + * @return void + */ + public function adminEditConsignee(Order $order, array $params) + { + $oldOrderConsignee = $order->consignee_name.','.$order->consignee_telephone.','.$order->consignee_zone.$order->consignee_address; + $order->update($params); + OrderLog::create([ + 'order_id'=>$order->id, + 'content'=> '修改订单收货信息原收货信息:'.$oldOrderConsignee, + ]); + } +} diff --git a/app/Admin/Services/AdminSendCouponService.php b/app/Admin/Services/SendCouponService.php similarity index 97% rename from app/Admin/Services/AdminSendCouponService.php rename to app/Admin/Services/SendCouponService.php index 9cebc44d..349cf5b4 100644 --- a/app/Admin/Services/AdminSendCouponService.php +++ b/app/Admin/Services/SendCouponService.php @@ -5,7 +5,7 @@ namespace App\Admin\Services; use App\Models\CouponSendTask; use App\Models\CouponTaskLog; -class AdminSendCouponService +class SendCouponService { public function startTaskById(int $id) { diff --git a/app/Models/OrderProduct.php b/app/Models/OrderProduct.php index 1435c0da..ab630b47 100644 --- a/app/Models/OrderProduct.php +++ b/app/Models/OrderProduct.php @@ -49,14 +49,35 @@ class OrderProduct extends Model return $this->hasMany(AfterSale::class, 'order_product_id'); } + /** + * 关联的订单包裹 + * + */ + public function packages() + { + return $this->belongsToMany(OrderPackage::class, 'order_package_products', 'order_product_id', 'order_package_id'); + } + /** * 获取订单商品是否能发起售后 * - * @return void + * @return bool */ - public function getCanAfterSaleAttribute() + public function getCanAfterSaleAttribute(): bool { - return !is_null($this->after_expire_at) && $this->after_expire_at < now() && $this->after_sale_state == 0; + $res = false; + + //老判断,有过期时间,且未到过期时间,未发起过售后 + // $oldJudge = !is_null($this->after_expire_at) && $this->after_expire_at < now() && $this->after_sale_state == 0; + + //新判断, 有发货单,有过期期时间需要判断未过到过期时间, 未发起过售后; + if ($this->packages()->where('is_failed', false)->count() >0) { + if ((is_null($this->after_expire_at) || $this->after_expire_at < now()) && $this->after_sale_state == 0) { + $res = true; + } + } + + return $res; } /**