From bb38d90d53d7570497f14e17ecefc32e06c909a9 Mon Sep 17 00:00:00 2001 From: koogua Date: Mon, 15 Feb 2021 21:10:34 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8E=BB=E9=99=A4=E9=80=80=E6=AC=BE=E5=BB=B6?= =?UTF-8?q?=E8=BF=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Console/Tasks/RefundTask.php | 7 -- app/Http/Admin/Services/Refund.php | 10 ++- app/Services/Logic/Refund/RefundCreate.php | 80 ++++++++++++++-------- 3 files changed, 59 insertions(+), 38 deletions(-) diff --git a/app/Console/Tasks/RefundTask.php b/app/Console/Tasks/RefundTask.php index 4abc568e..41e04a51 100644 --- a/app/Console/Tasks/RefundTask.php +++ b/app/Console/Tasks/RefundTask.php @@ -53,13 +53,6 @@ class RefundTask extends Task continue; } - /** - * 退款存在延迟,给取消退款调解机会 - */ - if (isset($itemInfo['deadline']) && $itemInfo['deadline'] > time()) { - continue; - } - try { $this->db->begin(); diff --git a/app/Http/Admin/Services/Refund.php b/app/Http/Admin/Services/Refund.php index e0df2bc9..89efeb70 100644 --- a/app/Http/Admin/Services/Refund.php +++ b/app/Http/Admin/Services/Refund.php @@ -103,9 +103,17 @@ class Refund extends Service $task = new TaskModel(); + $itemInfo = [ + 'refund' => [ + 'id' => $refund->id, + 'order_id' => $refund->order_id, + 'trade_id' => $refund->trade_id, + ], + ]; + $task->item_id = $refund->id; $task->item_type = TaskModel::TYPE_REFUND; - $task->item_info = ['refund' => $refund->toArray()]; + $task->item_info = $itemInfo; $task->priority = TaskModel::PRIORITY_HIGH; $task->status = TaskModel::STATUS_PENDING; diff --git a/app/Services/Logic/Refund/RefundCreate.php b/app/Services/Logic/Refund/RefundCreate.php index a3332928..bb9749ec 100644 --- a/app/Services/Logic/Refund/RefundCreate.php +++ b/app/Services/Logic/Refund/RefundCreate.php @@ -3,7 +3,6 @@ namespace App\Services\Logic\Refund; use App\Models\Refund as RefundModel; -use App\Models\Task; use App\Models\Task as TaskModel; use App\Repos\Order as OrderRepo; use App\Services\Logic\OrderTrait; @@ -19,6 +18,8 @@ class RefundCreate extends Service public function handle() { + $logger = $this->getLogger('refund'); + $post = $this->request->getPost(); $order = $this->checkOrderBySn($post['order_sn']); @@ -47,42 +48,61 @@ class RefundCreate extends Service $validator->checkAmount($order->amount, $refundAmount); - $refund = new RefundModel(); + try { - $refund->subject = $order->subject; - $refund->amount = $refundAmount; - $refund->apply_note = $applyNote; - $refund->order_id = $order->id; - $refund->trade_id = $trade->id; - $refund->owner_id = $user->id; - $refund->status = RefundModel::STATUS_APPROVED; - $refund->review_note = '退款周期内无条件审批'; + $this->db->begin(); - $refund->create(); + $refund = new RefundModel(); - $task = new TaskModel(); + $refund->subject = $order->subject; + $refund->amount = $refundAmount; + $refund->apply_note = $applyNote; + $refund->order_id = $order->id; + $refund->trade_id = $trade->id; + $refund->owner_id = $user->id; + $refund->status = RefundModel::STATUS_APPROVED; + $refund->review_note = '退款周期内无条件审批'; - /** - * 设定延迟,给取消退款一个调解机会 - */ - $itemInfo = [ - 'refund' => [ - 'id' => $refund->id, - 'order_id' => $refund->order_id, - 'trade_id' => $refund->trade_id, - ], - 'deadline' => time() + 3600 * 24 * 2, - ]; + if ($refund->create() === false) { + throw new \RuntimeException('Create Refund Failed'); + } - $task->item_id = $refund->id; - $task->item_type = TaskModel::TYPE_REFUND; - $task->item_info = $itemInfo; - $task->priority = TaskModel::PRIORITY_MIDDLE; - $task->status = TaskModel::STATUS_PENDING; + $task = new TaskModel(); - $task->create(); + $itemInfo = [ + 'refund' => [ + 'id' => $refund->id, + 'order_id' => $refund->order_id, + 'trade_id' => $refund->trade_id, + ], + ]; - return $refund; + $task->item_id = $refund->id; + $task->item_type = TaskModel::TYPE_REFUND; + $task->item_info = $itemInfo; + $task->priority = TaskModel::PRIORITY_MIDDLE; + $task->status = TaskModel::STATUS_PENDING; + + if ($task->create() === false) { + throw new \RuntimeException('Create Refund Task Failed'); + } + + $this->db->commit(); + + return $refund; + + } catch (\Exception $e) { + + $this->db->rollback(); + + $logger->error('Create Refund Exception ' . kg_json_encode([ + 'file' => $e->getFile(), + 'line' => $e->getLine(), + 'message' => $e->getMessage(), + ])); + + throw new \RuntimeException('sys.trans_rollback'); + } } }