request->getPost(); $order = $this->checkOrderBySn($post['order_sn']); $user = $this->getLoginUser(); $orderRepo = new OrderRepo(); $trade = $orderRepo->findLastTrade($order->id); $validator = new OrderValidator(); $validator->checkOwner($user->id, $order->user_id); $validator->checkIfAllowRefund($order); $refundService = new RefundService(); $preview = $refundService->preview($order); $refundAmount = $preview['refund_amount']; $validator = new RefundValidator(); $applyNote = $validator->checkApplyNote($post['apply_note']); $validator->checkAmount($order->amount, $refundAmount); $refund = new RefundModel(); $refund->subject = $order->subject; $refund->amount = $refundAmount; $refund->apply_note = $applyNote; $refund->order_id = $order->id; $refund->trade_id = $trade->id; $refund->user_id = $user->id; $refund->create(); return $refund; } }