Files
water-back/modules/Mall/Http/Controllers/Api/RefundController.php
2023-01-12 14:47:38 +08:00

124 lines
3.9 KiB
PHP

<?php
namespace Modules\Mall\Http\Controllers\Api;
use App\Api\Controllers\Controller;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
use Jason\Api\Api;
use Modules\Mall\Http\Resources\Api\Order\RefundCollection;
use Modules\Mall\Http\Resources\Api\Order\RefundLogResource;
use Modules\Mall\Http\Resources\Api\Order\RefundResource;
use Modules\Mall\Models\Refund;
class RefundController extends Controller
{
/**
* Notes: 走退货流程的订单
* @Author: 玄尘
* @Date : 2021/5/18 9:02
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\JsonResponse
*/
public function index(Request $request): JsonResponse
{
$state = $request->state ?? 'refunding';//refunding refunded
$list = Refund::byUser(Api::user())
->when($state, function ($query) use ($state) {
switch ($state) {
case 'refunding':
$query->whereIn('state', [
Refund::REFUND_APPLY,
Refund::REFUND_AGREE,
Refund::REFUND_PROCESS,
Refund::REFUND_DELIVER,
Refund::REFUND_DELIVERED,
Refund::REFUND_SIGNED,
]);
break;
case 'refunded':
$query->whereIn('state', [
Refund::REFUND_REFUSE,
Refund::REFUND_COMPLETED,
]);
break;
}
})
->paginate();
return $this->success(new RefundCollection($list));
}
/**
* Notes: 退单详情
* @Author: 玄尘
* @Date : 2021/5/18 11:35
* @param \Modules\Mall\Models\Refund $refund
* @return mixed
*/
public function show(Refund $refund)
{
if ($refund->user()->isNot(Api::user())) {
return $this->failed('您没有权限查看', 404);
}
return $this->success(new RefundResource($refund));
}
/**
* Notes: 退货
* @Author: 玄尘
* @Date : 2021/5/17 15:02
* @param \Modules\Mall\Models\Refund $refund
* @param \Illuminate\Http\Request $request
* @return mixed
* @throws \Exception
*/
public function deliver(Refund $refund, Request $request)
{
if ($refund->user()->isNot(Api::user())) {
return $this->failed('您没有权限操作');
}
$validator = Validator::make($request->all(), [
'company' => 'required',
'number' => 'required',
], [
'company.required' => '缺少物流公司',
'number.required' => '缺少物流单号',
]);
if ($validator->fails()) {
return $this->failed($validator->errors()->first());
}
// $express = Express::find($request->company);
// if (!$express) {
// return $this->failed('未找到物流公司');
// }
$res = $refund->deliver($request->company, $request->number);
if ($res === true) {
return $this->success('退货成功,请等待退款');
}
return $this->failed('退货失败');
}
/**
* Notes: 退单日志
* @Author: 玄尘
* @Date : 2021/5/18 11:36
* @param \Modules\Mall\Models\Refund $refund
* @return \Illuminate\Http\JsonResponse
*/
public function logs(Refund $refund): JsonResponse
{
$logs = $refund->logs()->latest()->get();
return $this->success(RefundLogResource::collection($logs));
}
}