request->param('page', 1)); $limit = intval($this->request->param('limit', $this->request->param('pageSize', 10))); // 兼容 pageSize 参数 $status = $this->request->param('status', ''); $keyword = $this->request->param('keyword', ''); // 确保分页参数有效 if ($page <= 0) $page = 1; if ($limit <= 0) $limit = 10; $userId = $this->userInfo['id'] ?? 0; $companyId = $this->userInfo['companyId'] ?? 0; if (empty($userId)) { return json(['code' => 401, 'msg' => '请先登录']); } $where = [ ['userId', '=', $userId], ['companyId', '=', $companyId], // 按公司ID查询 ]; // 关键词搜索 if (!empty($keyword)) { $where[] = ['orderNo|packageName', 'like', "%{$keyword}%"]; } // 状态筛选 if ($status !== '') { $where[] = ['status', '=', intval($status)]; } $list = VendorOrderModel::where($where) ->order('id', 'desc') ->page($page, $limit) ->select(); $total = VendorOrderModel::where($where)->count(); // 格式化数据 $result = []; foreach ($list as $item) { $result[] = [ 'id' => intval($item['id']), 'orderNo' => $item['orderNo'], 'userId' => intval($item['userId']), 'companyId' => intval($item['companyId'] ?? 0), 'packageId' => intval($item['packageId']), 'packageName' => $item['packageName'], 'totalAmount' => floatval($item['totalAmount']), 'payAmount' => floatval($item['payAmount']), 'advancePayment' => floatval($item['advancePayment'] ?? 0), 'status' => intval($item['status']), 'payTime' => !empty($item['payTime']) && is_numeric($item['payTime']) ? date('Y-m-d H:i:s', intval($item['payTime'])) : '', 'remark' => $item['remark'] ?? '', 'createTime' => !empty($item['createTime']) && is_numeric($item['createTime']) ? date('Y-m-d H:i:s', intval($item['createTime'])) : '', 'updateTime' => !empty($item['updateTime']) && is_numeric($item['updateTime']) ? date('Y-m-d H:i:s', intval($item['updateTime'])) : '', ]; } return json([ 'code' => 200, 'msg' => '获取成功', 'data' => [ 'list' => $result, 'total' => $total, 'page' => $page, 'limit' => $limit ] ]); } catch (\Exception $e) { Log::error('获取订单列表失败:' . $e->getMessage()); return json(['code' => 500, 'msg' => '获取失败:' . $e->getMessage()]); } } /** * 获取订单详情 * GET /v2/store/vendor/orders/:id * * @return \think\response\Json */ public function detail() { try { $id = intval($this->request->param('id', 0)); if (empty($id)) { return json(['code' => 400, 'msg' => '参数错误']); } $userId = $this->userInfo['id'] ?? 0; $companyId = $this->userInfo['companyId'] ?? 0; if (empty($userId)) { return json(['code' => 401, 'msg' => '请先登录']); } // 查询订单 $order = VendorOrderModel::where([ ['id', '=', $id], ['userId', '=', $userId], ['companyId', '=', $companyId] ])->find(); if (empty($order)) { return json(['code' => 404, 'msg' => '订单不存在']); } // 查询套餐信息 $package = VendorPackageModel::where([ ['id', '=', $order['packageId']], ['isDel', '=', 0] ])->find(); // 查询套餐项目 $projects = []; if ($package) { $projects = VendorProjectModel::where([ ['packageId', '=', $order['packageId']], ['isDel', '=', 0] ])->select(); } // 格式化订单信息 $orderData = [ 'id' => intval($order['id']), 'orderNo' => $order['orderNo'], 'userId' => intval($order['userId']), 'companyId' => intval($order['companyId'] ?? 0), 'packageId' => intval($order['packageId']), 'packageName' => $order['packageName'], 'totalAmount' => floatval($order['totalAmount']), 'payAmount' => floatval($order['payAmount']), 'advancePayment' => floatval($order['advancePayment'] ?? 0), 'status' => intval($order['status']), 'payTime' => !empty($order['payTime']) && is_numeric($order['payTime']) ? date('Y-m-d H:i:s', intval($order['payTime'])) : '', 'remark' => $order['remark'] ?? '', 'createTime' => !empty($order['createTime']) && is_numeric($order['createTime']) ? date('Y-m-d H:i:s', intval($order['createTime'])) : '', 'updateTime' => !empty($order['updateTime']) && is_numeric($order['updateTime']) ? date('Y-m-d H:i:s', intval($order['updateTime'])) : '', ]; // 添加套餐信息 if ($package) { $orderData['package'] = [ 'id' => intval($package['id']), 'name' => $package['name'], 'originalPrice' => floatval($package['originalPrice']), 'price' => floatval($package['price']), 'description' => $package['description'] ?? '', 'cover' => $package['cover'] ?? '', ]; } // 添加项目列表 $projectList = []; foreach ($projects as $project) { $projectList[] = [ 'id' => intval($project['id']), 'name' => $project['name'], 'originalPrice' => floatval($project['originalPrice']), 'price' => floatval($project['price']), 'duration' => intval($project['duration'] ?? 0), 'image' => $project['image'] ?? '', 'detail' => $project['detail'] ?? '', ]; } $orderData['package']['projects'] = $projectList; return json(['code' => 200, 'msg' => '获取成功', 'data' => $orderData]); } catch (\Exception $e) { Log::error('获取订单详情失败:' . $e->getMessage()); return json(['code' => 500, 'msg' => '获取失败:' . $e->getMessage()]); } } /** * 取消订单 * POST /v2/store/vendor/orders/:id/cancel * * @return \think\response\Json */ public function cancel() { try { $id = intval($this->request->param('id', 0)); if (empty($id)) { return json(['code' => 400, 'msg' => '参数错误']); } $userId = $this->userInfo['id'] ?? 0; $companyId = $this->userInfo['companyId'] ?? 0; if (empty($userId)) { return json(['code' => 401, 'msg' => '请先登录']); } // 检查订单是否存在且为待支付状态 $order = VendorOrderModel::where([ ['id', '=', $id], ['userId', '=', $userId], ['companyId', '=', $companyId], ['status', '=', VendorOrderModel::STATUS_UNPAID] ])->find(); if (empty($order)) { return json(['code' => 404, 'msg' => '订单不存在或状态不允许取消']); } // 更新订单状态为已取消 $order->status = VendorOrderModel::STATUS_CANCELED; $order->updateTime = time(); $order->save(); return json(['code' => 200, 'msg' => '取消成功']); } catch (\Exception $e) { Log::error('取消订单失败:' . $e->getMessage()); return json(['code' => 500, 'msg' => '取消失败:' . $e->getMessage()]); } } }