调整用户同意售后单时状态问题
parent
05b202303c
commit
0e18208c1e
|
|
@ -0,0 +1,82 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Admin\Actions\Show;
|
||||||
|
|
||||||
|
use App\Models\AfterSale;
|
||||||
|
use App\Services\AfterSaleService;
|
||||||
|
use Dcat\Admin\Show\AbstractTool;
|
||||||
|
use Illuminate\Contracts\Auth\Authenticatable;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Support\Facades\DB;
|
||||||
|
use Throwable;
|
||||||
|
|
||||||
|
class AfterSaleFinanceShipping extends AbstractTool
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
protected $title = '<i class="fa fa-exclamation-triangle icon-shuffle"></i> 确认发货';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 按钮样式定义,默认 btn btn-white waves-effect
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $style = 'btn btn-sm btn-danger';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 权限判断,如不需要可以删除此方法
|
||||||
|
*
|
||||||
|
* @param Model|Authenticatable|HasPermissions|null $user
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
protected function authorize($user): bool
|
||||||
|
{
|
||||||
|
return $user->can('dcat.admin.after_sales.finance');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 处理请求,如果不需要接口处理,请直接删除这个方法
|
||||||
|
*
|
||||||
|
* @param Request $request
|
||||||
|
*
|
||||||
|
* @return Response
|
||||||
|
*/
|
||||||
|
public function handle(Request $request)
|
||||||
|
{
|
||||||
|
// 获取主键
|
||||||
|
$key = $this->getKey();
|
||||||
|
|
||||||
|
$afterSaleService = new AfterSaleService();
|
||||||
|
try {
|
||||||
|
DB::beginTransaction();
|
||||||
|
$afterSale = AfterSale::where('state', AfterSale::STATE_FINANCE)->findOrFail($key);
|
||||||
|
$afterSaleService->finance($afterSale);
|
||||||
|
DB::commit();
|
||||||
|
} catch (Throwable $th) {
|
||||||
|
DB::rollBack();
|
||||||
|
report($th);
|
||||||
|
return $this->response()->error('操作失败:'.$th->getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->response()
|
||||||
|
->success(__('admin.update_succeeded'))
|
||||||
|
->refresh();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function html()
|
||||||
|
{
|
||||||
|
return parent::html().' ';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 确认弹窗信息,如不需要可以删除此方法
|
||||||
|
*
|
||||||
|
* @return string|array|void
|
||||||
|
*/
|
||||||
|
public function confirm()
|
||||||
|
{
|
||||||
|
return ['是否确认发货?', '该操作不可逆,确认后将产生新的订单以及发货包裹单。'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -3,6 +3,7 @@
|
||||||
namespace App\Admin\Controllers;
|
namespace App\Admin\Controllers;
|
||||||
|
|
||||||
use App\Admin\Actions\Show\AfterSaleFinance;
|
use App\Admin\Actions\Show\AfterSaleFinance;
|
||||||
|
use App\Admin\Actions\Show\AfterSaleFinanceShipping;
|
||||||
use App\Admin\Actions\Show\AfterSaleShipping;
|
use App\Admin\Actions\Show\AfterSaleShipping;
|
||||||
use App\Admin\Actions\Show\AfterSaleVerify;
|
use App\Admin\Actions\Show\AfterSaleVerify;
|
||||||
use App\Admin\Repositories\AfterSale;
|
use App\Admin\Repositories\AfterSale;
|
||||||
|
|
@ -31,7 +32,12 @@ class AfterSaleController extends AdminController
|
||||||
$grid->column('sn');
|
$grid->column('sn');
|
||||||
$grid->column('orderProduct.name');
|
$grid->column('orderProduct.name');
|
||||||
$grid->column('num');
|
$grid->column('num');
|
||||||
$grid->column('amount');
|
$grid->column('amount')->display(function ($value) {
|
||||||
|
if (in_array($this->type, [AfterSaleModel::TYPE_CHANGE, AfterSaleModel::TYPE_FILL])) {
|
||||||
|
return '0.00';
|
||||||
|
}
|
||||||
|
return bcdiv($value, 100, 2);
|
||||||
|
})->prepend('¥');
|
||||||
$grid->column('type')->using([
|
$grid->column('type')->using([
|
||||||
AfterSaleModel::TYPE_REFUND_AND_RETURN => '退款退货',
|
AfterSaleModel::TYPE_REFUND_AND_RETURN => '退款退货',
|
||||||
AfterSaleModel::TYPE_REFUND => '退款',
|
AfterSaleModel::TYPE_REFUND => '退款',
|
||||||
|
|
@ -100,6 +106,11 @@ class AfterSaleController extends AdminController
|
||||||
$show->field('order.sn');
|
$show->field('order.sn');
|
||||||
$show->field('order_product.name');
|
$show->field('order_product.name');
|
||||||
$show->field('num');
|
$show->field('num');
|
||||||
|
if (in_array($show->model()->type, [AfterSaleModel::TYPE_REFUND_AND_RETURN, AfterSaleModel::TYPE_REFUND])) {
|
||||||
|
$show->field('amount')->as(function ($amount) {
|
||||||
|
return '¥'.bcdiv($amount, 100, 2);
|
||||||
|
});
|
||||||
|
}
|
||||||
$show->field('type')->using([
|
$show->field('type')->using([
|
||||||
AfterSaleModel::TYPE_REFUND_AND_RETURN => '退款退货',
|
AfterSaleModel::TYPE_REFUND_AND_RETURN => '退款退货',
|
||||||
AfterSaleModel::TYPE_REFUND => '退款',
|
AfterSaleModel::TYPE_REFUND => '退款',
|
||||||
|
|
@ -136,7 +147,11 @@ class AfterSaleController extends AdminController
|
||||||
$tools->append(new AfterSaleShipping());
|
$tools->append(new AfterSaleShipping());
|
||||||
}
|
}
|
||||||
if ($show->model()->state == AfterSaleModel::STATE_FINANCE) {
|
if ($show->model()->state == AfterSaleModel::STATE_FINANCE) {
|
||||||
$tools->append(new AfterSaleFinance());
|
if (in_array($show->model()->type, [AfterSaleModel::TYPE_REFUND_AND_RETURN, AfterSaleModel::TYPE_REFUND])) {
|
||||||
|
$tools->append(new AfterSaleFinance());
|
||||||
|
} elseif (in_array($show->model()->type, [AfterSaleModel::TYPE_CHANGE])) {
|
||||||
|
$tools->append(new AfterSaleFinanceShipping());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}));
|
}));
|
||||||
|
|
|
||||||
|
|
@ -40,7 +40,7 @@ class AfterSaleVerify extends Form implements LazyRenderable
|
||||||
DB::beginTransaction();
|
DB::beginTransaction();
|
||||||
$afterSale = AfterSale::where('state', AfterSale::STATE_VERIFY)->findOrFail($this->payload['id']);
|
$afterSale = AfterSale::where('state', AfterSale::STATE_VERIFY)->findOrFail($this->payload['id']);
|
||||||
if ($input['state'] == 3) {//审核通过
|
if ($input['state'] == 3) {//审核通过
|
||||||
$afterSaleService->verify($afterSale, $input['remarks3']);
|
$afterSaleService->verify($afterSale, $input['remarks3'], (int) $input['amount']);
|
||||||
} elseif ($input['state'] == 1) {//需要补充资料
|
} elseif ($input['state'] == 1) {//需要补充资料
|
||||||
$afterSaleService->backApply($afterSale, $input['remarks1']);
|
$afterSaleService->backApply($afterSale, $input['remarks1']);
|
||||||
}
|
}
|
||||||
|
|
@ -63,8 +63,12 @@ class AfterSaleVerify extends Form implements LazyRenderable
|
||||||
{
|
{
|
||||||
$id = $this->payload['id'] ?? 0;
|
$id = $this->payload['id'] ?? 0;
|
||||||
$afterSale = AfterSale::findOrFail($id);
|
$afterSale = AfterSale::findOrFail($id);
|
||||||
if (!in_array($afterSale->type, [3, 4])) {
|
if (in_array($afterSale->type, [1, 2])) {
|
||||||
$this->currency('amount')->symbol('¥')->value($afterSale->amount);
|
$this->currency('amount')->customFormat(function () use ($afterSale) {
|
||||||
|
return bcdiv($afterSale->amount, 100, 2);
|
||||||
|
})->saving(function ($amount) {
|
||||||
|
return bcmul($amount, 100);
|
||||||
|
})->symbol('¥');
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->radio('state')
|
$this->radio('state')
|
||||||
|
|
@ -72,13 +76,13 @@ class AfterSaleVerify extends Form implements LazyRenderable
|
||||||
$defaultRemarks = '';
|
$defaultRemarks = '';
|
||||||
switch ($afterSale->type) {
|
switch ($afterSale->type) {
|
||||||
case 1:
|
case 1:
|
||||||
$defaultRemarks = '同意退款退货';//需要用户确认并填入回寄单号
|
$defaultRemarks = '同意退款退货, 请确认退款金额,并填入回寄单号';//需要用户确认并填入回寄单号
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
$defaultRemarks = '同意退款,等待财务打款审核。';
|
$defaultRemarks = '同意退款,请确认退款金额。';
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
$defaultRemarks = '同意换货';//需要用户确认并填入回寄单号
|
$defaultRemarks = '同意换货,请填入回寄单号';//需要用户确认并填入回寄单号
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
$defaultRemarks = '同意补货, 新的订单号:';//需要用户收到补货后确认,可后台关闭
|
$defaultRemarks = '同意补货, 新的订单号:';//需要用户收到补货后确认,可后台关闭
|
||||||
|
|
|
||||||
|
|
@ -64,6 +64,9 @@ class AfterSaleController extends Controller
|
||||||
$afterSale = $afterSaleService->create($request->user(), $orderProduct, $input['type'], $input['num'], $input);
|
$afterSale = $afterSaleService->create($request->user(), $orderProduct, $input['type'], $input['num'], $input);
|
||||||
|
|
||||||
DB::commit();
|
DB::commit();
|
||||||
|
} catch (BizException $th) {
|
||||||
|
DB::rollBack();
|
||||||
|
throw new BizException($th->getMessage());
|
||||||
} catch (Throwable $th) {
|
} catch (Throwable $th) {
|
||||||
DB::rollBack();
|
DB::rollBack();
|
||||||
report($th);
|
report($th);
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,7 @@ class AfterSale extends Model
|
||||||
|
|
||||||
protected $casts = [
|
protected $casts = [
|
||||||
'images' => JsonArray::class,
|
'images' => JsonArray::class,
|
||||||
'amount' => Price::class,
|
// 'amount' => Price::class,
|
||||||
];
|
];
|
||||||
|
|
||||||
protected $fillable = [
|
protected $fillable = [
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,7 @@ class AfterSaleService
|
||||||
// }
|
// }
|
||||||
|
|
||||||
//校验该订单商品不能有已完成、处理中的售后记录
|
//校验该订单商品不能有已完成、处理中的售后记录
|
||||||
if (AfterSale::where('order_product_id', $orderProduct->id)->where('state', '<', AfterSale::STATE_FINISH)->exists()) {
|
if (AfterSale::where('order_product_id', $orderProduct->id)->where('state', '<', AfterSale::STATE_CANCEL)->exists()) {
|
||||||
throw new BizException('该订单商品已申请售后');
|
throw new BizException('该订单商品已申请售后');
|
||||||
}
|
}
|
||||||
//校验申请数量不能超过订单商品数量
|
//校验申请数量不能超过订单商品数量
|
||||||
|
|
@ -36,18 +36,8 @@ class AfterSaleService
|
||||||
throw new BizException('申请售后的数量不能大于订单商品数量');
|
throw new BizException('申请售后的数量不能大于订单商品数量');
|
||||||
}
|
}
|
||||||
|
|
||||||
// switch ($type) {
|
$amount = ($num == $orderProduct->quantity) ? $orderProduct->total_amount : bcmul(bcdiv($orderProduct->total_amount, $orderProduct->quantity), $num);
|
||||||
// case 3:
|
|
||||||
// $amount = 0;
|
|
||||||
// break;
|
|
||||||
// case 4:
|
|
||||||
// $amount = 0;
|
|
||||||
// break;
|
|
||||||
// default:
|
|
||||||
// dd(bcmul(bcdiv(10, 3, 2), 3, 2));如果数量相等,则直接取总额
|
|
||||||
$amount = ($num == $orderProduct->quantity) ? $orderProduct->total_amount : bcmul(bcdiv($orderProduct->total_amount, $orderProduct->quantity, 2), $num, 2);
|
|
||||||
// break;
|
|
||||||
// }
|
|
||||||
$afterSale = AfterSale::create(array_merge($params, [
|
$afterSale = AfterSale::create(array_merge($params, [
|
||||||
'user_id' => $user->id,
|
'user_id' => $user->id,
|
||||||
'order_id' => $orderProduct->order_id,
|
'order_id' => $orderProduct->order_id,
|
||||||
|
|
@ -145,12 +135,13 @@ class AfterSaleService
|
||||||
* @param string $remarks
|
* @param string $remarks
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function verify(AfterSale $afterSale, string $remarks)
|
public function verify(AfterSale $afterSale, string $remarks, int $amount)
|
||||||
{
|
{
|
||||||
if ($this->isWaitVerify($afterSale)) {
|
if ($this->isWaitVerify($afterSale)) {
|
||||||
switch ($afterSale->type) {
|
switch ($afterSale->type) {
|
||||||
case AfterSale::TYPE_REFUND_AND_RETURN:
|
case AfterSale::TYPE_REFUND_AND_RETURN:
|
||||||
$afterSale->update([
|
$afterSale->update([
|
||||||
|
'amount' => $amount,
|
||||||
'state' => $afterSale::STATE_AGREE,
|
'state' => $afterSale::STATE_AGREE,
|
||||||
'remarks' => $remarks,
|
'remarks' => $remarks,
|
||||||
]);
|
]);
|
||||||
|
|
@ -162,6 +153,7 @@ class AfterSaleService
|
||||||
break;
|
break;
|
||||||
case AfterSale::TYPE_REFUND:
|
case AfterSale::TYPE_REFUND:
|
||||||
$afterSale->update([
|
$afterSale->update([
|
||||||
|
'amount' => $amount,
|
||||||
'state' => $afterSale::STATE_AGREE,
|
'state' => $afterSale::STATE_AGREE,
|
||||||
'remarks' => $remarks,
|
'remarks' => $remarks,
|
||||||
]);
|
]);
|
||||||
|
|
@ -242,10 +234,9 @@ class AfterSaleService
|
||||||
break;
|
break;
|
||||||
case AfterSale::TYPE_CHANGE:
|
case AfterSale::TYPE_CHANGE:
|
||||||
$afterSale->update([
|
$afterSale->update([
|
||||||
'remarks' => $remarks.',已为您生成新订单,请注意查收。',
|
'remarks' => $remarks,
|
||||||
'state' => AfterSale::STATE_FINISH,
|
'state' => AfterSale::STATE_SHIPPING,
|
||||||
]);
|
]);
|
||||||
//todo - 生成新订单以及发货单;
|
|
||||||
break;
|
break;
|
||||||
case AfterSale::TYPE_FILL:
|
case AfterSale::TYPE_FILL:
|
||||||
$afterSale->update([
|
$afterSale->update([
|
||||||
|
|
@ -297,8 +288,11 @@ class AfterSaleService
|
||||||
public function finance(AfterSale $afterSale, $remarks ='退款成功')
|
public function finance(AfterSale $afterSale, $remarks ='退款成功')
|
||||||
{
|
{
|
||||||
if ($this->isWaitFinance($afterSale)) {
|
if ($this->isWaitFinance($afterSale)) {
|
||||||
|
if (in_array($afterSale->type, [AfterSale::TYPE_REFUND_AND_RETURN, AfterSale::TYPE_REFUND])) {
|
||||||
//todo-执行实际退款操作;
|
//todo-执行实际退款操作;
|
||||||
|
} elseif (in_array($afterSale->type, [AfterSale::TYPE_CHANGE])) {//换货流程
|
||||||
|
//todo-执行生成新的订单,发货单操作;
|
||||||
|
}
|
||||||
|
|
||||||
AfterSaleLog::create([
|
AfterSaleLog::create([
|
||||||
'after_sale_id' => $afterSale->id,
|
'after_sale_id' => $afterSale->id,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue