[ 'op' => '操作', 'id' => '订单ID', 'user_id' => '提交用户', 'product_id' => '商品ID', 'product_type' => '商品类型', 'product_name' => '商品名称', 'coupon' => '优惠码', 'price' => '金额', 'status' => '状态', 'create_time' => '创建时间', 'update_time' => '更新时间', ], ]; /** * @throws Exception */ public function index(ServerRequest $request, Response $response, array $args): ResponseInterface { return $response->write( $this->view() ->assign('details', self::$details) ->fetch('admin/order/index.tpl') ); } /** * @throws Exception */ public function detail(ServerRequest $request, Response $response, array $args): ResponseInterface { $id = $args['id']; $order = (new Order())->find($id); if ($order === null) { return $response->withStatus(301)->withHeader('Location', '/admin/order'); } $order->product_type_text = $order->productType(); $order->status_text = $order->status(); $order->create_time = Tools::toDateTime($order->create_time); $order->update_time = Tools::toDateTime($order->update_time); $order->content = json_decode($order->product_content); $invoice = (new Invoice())->where('order_id', $id)->first(); $invoice->status = $invoice->status(); $invoice->create_time = Tools::toDateTime($invoice->create_time); $invoice->update_time = Tools::toDateTime($invoice->update_time); $invoice->pay_time = Tools::toDateTime($invoice->pay_time); $invoice->content = json_decode($invoice->content); return $response->write( $this->view() ->assign('order', $order) ->assign('invoice', $invoice) ->fetch('admin/order/view.tpl') ); } public function cancel(ServerRequest $request, Response $response, array $args): ResponseInterface { $order_id = $args['id']; $order = (new Order())->find($order_id); if ($order === null) { return $response->withJson([ 'ret' => 0, 'msg' => '订单不存在', ]); } if (in_array($order->status, ['activated', 'expired', 'cancelled'])) { return $response->withJson([ 'ret' => 0, 'msg' => '不能取消' . $order->status() . '的产品', ]); } $order->update_time = time(); $order->status = 'cancelled'; $order->save(); $invoice = (new Invoice())->where('order_id', $order_id)->first(); if ($invoice === null) { return $response->withJson([ 'ret' => 1, 'msg' => '订单取消成功,但关联账单不存在', ]); } if (in_array($invoice->status, ['paid_gateway', 'paid_balance', 'paid_admin'])) { $invoice->refundToBalance(); return $response->withJson([ 'ret' => 1, 'msg' => '订单取消成功,关联账单已退款至余额', ]); } $invoice->update_time = time(); $invoice->status = 'cancelled'; $invoice->save(); return $response->withJson([ 'ret' => 1, 'msg' => '订单取消成功', ]); } public function delete(ServerRequest $request, Response $response, array $args): ResponseInterface { $order_id = $args['id']; $order = (new Order())->find($order_id); if ($order === null) { return $response->withJson([ 'ret' => 0, 'msg' => '订单不存在', ]); } $invoice = (new Invoice())->where('order_id', $order_id)->first(); if ($order->delete() && $invoice->delete()) { return $response->withJson([ 'ret' => 1, 'msg' => '删除成功', ]); } return $response->withJson([ 'ret' => 1, 'msg' => '删除失败', ]); } public function ajax(ServerRequest $request, Response $response, array $args): ResponseInterface { $orders = (new Order())->orderBy('id', 'desc')->get(); foreach ($orders as $order) { $order->op = ''; if (in_array($order->status, ['pending_payment', 'pending_activation'])) { $order->op .= ' '; } $order->op .= ' 查看'; $order->product_type = $order->productType(); $order->status = $order->status(); $order->create_time = Tools::toDateTime($order->create_time); $order->update_time = Tools::toDateTime($order->update_time); } return $response->withJson([ 'orders' => $orders, ]); } }