后台退款接口
This commit is contained in:
@@ -106,6 +106,100 @@ class FinanceController extends BaseAdminController
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 管理员退款
|
||||
*
|
||||
* @return string[]
|
||||
* @throws Exception
|
||||
*/
|
||||
public function actionAdminRefundAgree()
|
||||
{
|
||||
// TODO 退款记录生成,然后走退款流程
|
||||
// 获取前端传递的POST数据
|
||||
$post = \Yii::$app->request->post();
|
||||
|
||||
// 对必要的字段进行验证
|
||||
$this->requestValidate($post, [
|
||||
['id', 'required'],
|
||||
['refund_type', 'required'],
|
||||
['refund_type', 'required'],
|
||||
]);
|
||||
|
||||
// 实例化ProductOrder模型
|
||||
$orderModel = new ProductOrder();
|
||||
|
||||
// 根据POST数据中的id查询对应的订单信息
|
||||
$orderInfo = $orderModel->find()->where(['id' => $post['id']])->asArray()->one();
|
||||
|
||||
// 开启数据库事务
|
||||
$t = \Yii::$app->db->beginTransaction();
|
||||
|
||||
try {
|
||||
// 实例化退款申请模型
|
||||
$model = new ProductOrderRefund();
|
||||
|
||||
// 填充退款申请模型的基础信息
|
||||
$model->order_id = $post['id'];
|
||||
$model->user_id = \Yii::$app->user->id;
|
||||
$model->reason = !empty($post['reason'])? $post['reason']:'管理员-'. \Yii::$app->user->id. '-发起退款';
|
||||
|
||||
// 如果POST数据中包含退款图片,则填充退款图片字段
|
||||
if (!empty($post['refund_images'])) {
|
||||
$model->refund_images = $post['refund_images'];
|
||||
}
|
||||
|
||||
// 填充其他退款申请字段
|
||||
$model->remark = '平台申请退款';
|
||||
$model->refund_no = $orderInfo['order_no'];
|
||||
$model->refund_price = $orderInfo['total_pay_price'];
|
||||
$model->refund_time = date('Y-m-d H:i:s');
|
||||
|
||||
// 保存退款申请模型
|
||||
$model->save();
|
||||
|
||||
// 根据刚保存的退款申请ID查找退款申请记录,确保其存在且未被删除
|
||||
$ProductOrderRefund = ProductOrderRefund::find()->where([
|
||||
'id' => $model->id,
|
||||
'is_deleted' => 0,
|
||||
])->with(['order'])->one();
|
||||
|
||||
// 如果找不到退款申请记录,则抛出异常
|
||||
if (!$ProductOrderRefund) {
|
||||
throw new Exception('退款申请记录不存在');
|
||||
}
|
||||
|
||||
// 根据退款申请记录中的订单ID查找对应的订单,确保订单存在
|
||||
$ProductOrder = ProductOrder::find()->where(['id' => $ProductOrderRefund->order_id])->one();
|
||||
if (!$ProductOrder) throw new Exception('产品订单不存在');
|
||||
|
||||
// 更新订单的退款状态为“已退款”
|
||||
$ProductOrder->refund_status = 3;
|
||||
$ProductOrder->saveOrFail();
|
||||
|
||||
// 更新退款申请记录的状态,标记为已退款
|
||||
$ProductOrderRefund->is_refund = 1;
|
||||
$ProductOrderRefund->status = 1;
|
||||
$ProductOrderRefund->refund_time = date('Y-m-d H:i:s', time());
|
||||
$ProductOrderRefund->saveOrFail();
|
||||
|
||||
// 执行退款操作
|
||||
$form = new ProductRefundForm();
|
||||
$form->refundMoney($ProductOrderRefund);
|
||||
|
||||
// 提交事务
|
||||
$t->commit();
|
||||
|
||||
// 返回成功标识
|
||||
return ['success'];
|
||||
} catch (\Exception $e) {
|
||||
// 如果发生异常,则回滚事务
|
||||
$t->rollBack();
|
||||
|
||||
// 重新抛出异常,传递错误信息
|
||||
throw new Exception($e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @doc-name 拒绝退款操作
|
||||
* @doc-param int id 退款申请记录ID
|
||||
|
||||
Reference in New Issue
Block a user