diff --git a/app/Admin/Services/OrderPackageService.php b/app/Admin/Services/OrderPackageService.php index b5187b72..5cab5294 100644 --- a/app/Admin/Services/OrderPackageService.php +++ b/app/Admin/Services/OrderPackageService.php @@ -99,6 +99,10 @@ class OrderPackageService */ public function failPackage(OrderPackage $package) { + if ($package->is_failed) { + throw new BizException('已作废的货运单不能需要再作废了'); + } + //如果订单完成了,不能作废货运单 if ($package->order->isCompleted()) { throw new BizException('订单已完成,无法作废该货运单'); diff --git a/app/Admin/Services/OrderService.php b/app/Admin/Services/OrderService.php index 63a91af5..b4adbc90 100644 --- a/app/Admin/Services/OrderService.php +++ b/app/Admin/Services/OrderService.php @@ -5,6 +5,7 @@ namespace App\Admin\Services; use App\Exceptions\BizException; use App\Models\Order; use App\Models\OrderLog; +use App\Services\OrderService as EndpointOrderService; class OrderService { @@ -40,13 +41,11 @@ class OrderService { if ($order->isPending()) { //操作订单状态-需要调整为统一支付方法 - $order->update([ - 'status' => Order::STATUS_PAID, - ]); - - OrderLog::create([ - 'order_id'=>$order->id, - 'content'=> '改变订单状态为【已支付】', + $orderService = new EndpointOrderService(); + $orderService->paySuccess($order, [ + 'pay_sn' => date('YmdHis').sprintf('%02d', mt_rand(1, 99)), + 'pay_way' => Order::PAY_WAY_OFFLINE, + 'pay_at' => now(), ]); } } diff --git a/app/Endpoint/Api/Http/Controllers/Order/OrderController.php b/app/Endpoint/Api/Http/Controllers/Order/OrderController.php index 545b8710..e8dc784e 100644 --- a/app/Endpoint/Api/Http/Controllers/Order/OrderController.php +++ b/app/Endpoint/Api/Http/Controllers/Order/OrderController.php @@ -117,7 +117,7 @@ class OrderController extends Controller { $order = $request->user()->orders()->findOrFail($id); $order->load('products'); - $order->load('packages'); + $order->load('lastPackage'); return OrderResource::make($order); } diff --git a/app/Endpoint/Api/Http/Resources/OrderResource.php b/app/Endpoint/Api/Http/Resources/OrderResource.php index 534ff223..b577e27c 100644 --- a/app/Endpoint/Api/Http/Resources/OrderResource.php +++ b/app/Endpoint/Api/Http/Resources/OrderResource.php @@ -36,7 +36,7 @@ class OrderResource extends JsonResource 'created_at' => $this->created_at->toDateTimeString(), 'expires_at' => $this->expires_at, - 'packages' => OrderPackageResource::make($this->whenloaded('packages')->where('is_failed', false)->sortBy('created_at')->first()), + 'packages' => OrderPackageResource::make($this->whenLoaded('lastPackage')), ]; } } diff --git a/app/Models/Order.php b/app/Models/Order.php index 9e2e6061..d5da4455 100644 --- a/app/Models/Order.php +++ b/app/Models/Order.php @@ -32,6 +32,7 @@ class Order extends Model * 支付方式 */ public const PAY_WAY_WXPAY = 'wxpay'; // 微信支付 + public const PAY_WAY_OFFLINE = 'offline'; // 现金支付 /** * @var array @@ -122,6 +123,15 @@ class Order extends Model return $this->hasMany(OrderPackage::class); } + /** + * 此订单的最新包裹 + * + */ + public function lastPackage() + { + return $this->hasOne(OrderPackage::class)->where('is_failed', false)->latestOfMany(); + } + /** * 属于此订单的退款任务 */ diff --git a/app/Services/AfterSaleService.php b/app/Services/AfterSaleService.php index 0358098c..b4c7183d 100644 --- a/app/Services/AfterSaleService.php +++ b/app/Services/AfterSaleService.php @@ -2,10 +2,12 @@ namespace App\Services; +use App\Admin\Services\OrderService; use App\Exceptions\BizException; use App\Helpers\Order as OrderHelper; use App\Models\AfterSale; use App\Models\AfterSaleLog; +use App\Models\Order; use App\Models\OrderProduct; use App\Models\User; @@ -325,16 +327,56 @@ class AfterSaleService public function finance(AfterSale $afterSale, $remarks ='退款成功') { if ($this->isWaitFinance($afterSale)) { + $order = $afterSale->order; if (in_array($afterSale->type, [AfterSale::TYPE_REFUND_AND_RETURN, AfterSale::TYPE_REFUND])) { //todo-执行实际退款操作; - $order = $afterSale->order; $order->refundTasks()->create([ 'sn' => OrderHelper::serialNumber(), - 'amount' => $order->total_amount, + 'amount' => $afterSale->amount, 'reason' => '取消订单', ]); } elseif (in_array($afterSale->type, [AfterSale::TYPE_CHANGE])) {//换货流程 - //todo-执行生成新的订单,发货单操作; + //todo -- 换货单的分润记录; + + //复制一个订单(存商品价格,支付价格为0;) + $changeOrder = new Order(); + $changeOrder->user_id = $order->user_id; + $changeOrder->sn = OrderHelper::serialNumber(); + $changeOrder->products_total_amount = $afterSale->amount; + $changeOrder->coupon_discount_amount = 0; + $changeOrder->vip_discount_amount = 0; + $changeOrder->reduced_amount = 0; + $changeOrder->shipping_fee = 0; + $changeOrder->total_amount = 0; + + // 收货地址 + $changeOrder->consignee_name = $order->consignee_name; + $changeOrder->consignee_telephone = $order->consignee_telephone; + $changeOrder->consignee_zone = $order->consignee_zone; + $changeOrder->consignee_address = $order->consignee_address; + $changeOrder->save(); + + OrderProduct::create([ + 'user_id' => $changeOrder->user_id, + 'order_id' => $changeOrder->id, + 'spu_id' => $afterSale->orderProduct->spu_id, + 'sku_id' => $afterSale->orderProduct->sku_id, + 'category_id' => $afterSale->orderProduct->category_id, + 'name' => $afterSale->orderProduct->name, + 'specs' => $afterSale->orderProduct->specs, + 'cover' => $afterSale->orderProduct->cover, + 'weight' => $afterSale->orderProduct->weight, + 'sell_price' => $afterSale->orderProduct->sell_price, + 'vip_price' => $afterSale->orderProduct->vip_price, + 'quantity' => $afterSale->num, + 'coupon_discount_amount'=> 0, + 'vip_discount_amount' => 0, + 'reduced_amount' => 0, + 'total_amount' => $afterSale->amount, + ]); + + $orderService = new OrderService(); + $orderService->adminPay($changeOrder);//支付该订单 } AfterSaleLog::create([