6
0
Fork 0

处理售后订单

release
vine_liutk 2021-12-20 18:26:17 +08:00
parent 1bc12ba559
commit 41967565d1
6 changed files with 67 additions and 12 deletions

View File

@ -99,6 +99,10 @@ class OrderPackageService
*/ */
public function failPackage(OrderPackage $package) public function failPackage(OrderPackage $package)
{ {
if ($package->is_failed) {
throw new BizException('已作废的货运单不能需要再作废了');
}
//如果订单完成了,不能作废货运单 //如果订单完成了,不能作废货运单
if ($package->order->isCompleted()) { if ($package->order->isCompleted()) {
throw new BizException('订单已完成,无法作废该货运单'); throw new BizException('订单已完成,无法作废该货运单');

View File

@ -5,6 +5,7 @@ namespace App\Admin\Services;
use App\Exceptions\BizException; use App\Exceptions\BizException;
use App\Models\Order; use App\Models\Order;
use App\Models\OrderLog; use App\Models\OrderLog;
use App\Services\OrderService as EndpointOrderService;
class OrderService class OrderService
{ {
@ -40,13 +41,11 @@ class OrderService
{ {
if ($order->isPending()) { if ($order->isPending()) {
//操作订单状态-需要调整为统一支付方法 //操作订单状态-需要调整为统一支付方法
$order->update([ $orderService = new EndpointOrderService();
'status' => Order::STATUS_PAID, $orderService->paySuccess($order, [
]); 'pay_sn' => date('YmdHis').sprintf('%02d', mt_rand(1, 99)),
'pay_way' => Order::PAY_WAY_OFFLINE,
OrderLog::create([ 'pay_at' => now(),
'order_id'=>$order->id,
'content'=> '改变订单状态为【已支付】',
]); ]);
} }
} }

View File

@ -117,7 +117,7 @@ class OrderController extends Controller
{ {
$order = $request->user()->orders()->findOrFail($id); $order = $request->user()->orders()->findOrFail($id);
$order->load('products'); $order->load('products');
$order->load('packages'); $order->load('lastPackage');
return OrderResource::make($order); return OrderResource::make($order);
} }

View File

@ -36,7 +36,7 @@ class OrderResource extends JsonResource
'created_at' => $this->created_at->toDateTimeString(), 'created_at' => $this->created_at->toDateTimeString(),
'expires_at' => $this->expires_at, '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')),
]; ];
} }
} }

View File

@ -32,6 +32,7 @@ class Order extends Model
* 支付方式 * 支付方式
*/ */
public const PAY_WAY_WXPAY = 'wxpay'; // 微信支付 public const PAY_WAY_WXPAY = 'wxpay'; // 微信支付
public const PAY_WAY_OFFLINE = 'offline'; // 现金支付
/** /**
* @var array * @var array
@ -122,6 +123,15 @@ class Order extends Model
return $this->hasMany(OrderPackage::class); return $this->hasMany(OrderPackage::class);
} }
/**
* 此订单的最新包裹
*
*/
public function lastPackage()
{
return $this->hasOne(OrderPackage::class)->where('is_failed', false)->latestOfMany();
}
/** /**
* 属于此订单的退款任务 * 属于此订单的退款任务
*/ */

View File

@ -2,10 +2,12 @@
namespace App\Services; namespace App\Services;
use App\Admin\Services\OrderService;
use App\Exceptions\BizException; use App\Exceptions\BizException;
use App\Helpers\Order as OrderHelper; use App\Helpers\Order as OrderHelper;
use App\Models\AfterSale; use App\Models\AfterSale;
use App\Models\AfterSaleLog; use App\Models\AfterSaleLog;
use App\Models\Order;
use App\Models\OrderProduct; use App\Models\OrderProduct;
use App\Models\User; use App\Models\User;
@ -325,16 +327,56 @@ class AfterSaleService
public function finance(AfterSale $afterSale, $remarks ='退款成功') public function finance(AfterSale $afterSale, $remarks ='退款成功')
{ {
if ($this->isWaitFinance($afterSale)) { if ($this->isWaitFinance($afterSale)) {
$order = $afterSale->order;
if (in_array($afterSale->type, [AfterSale::TYPE_REFUND_AND_RETURN, AfterSale::TYPE_REFUND])) { if (in_array($afterSale->type, [AfterSale::TYPE_REFUND_AND_RETURN, AfterSale::TYPE_REFUND])) {
//todo-执行实际退款操作; //todo-执行实际退款操作;
$order = $afterSale->order;
$order->refundTasks()->create([ $order->refundTasks()->create([
'sn' => OrderHelper::serialNumber(), 'sn' => OrderHelper::serialNumber(),
'amount' => $order->total_amount, 'amount' => $afterSale->amount,
'reason' => '取消订单', 'reason' => '取消订单',
]); ]);
} elseif (in_array($afterSale->type, [AfterSale::TYPE_CHANGE])) {//换货流程 } 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([ AfterSaleLog::create([