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)
{
if ($package->is_failed) {
throw new BizException('已作废的货运单不能需要再作废了');
}
//如果订单完成了,不能作废货运单
if ($package->order->isCompleted()) {
throw new BizException('订单已完成,无法作废该货运单');

View File

@ -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(),
]);
}
}

View File

@ -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);
}

View File

@ -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')),
];
}
}

View File

@ -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();
}
/**
* 属于此订单的退款任务
*/

View File

@ -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([