request->param('page', 1); $limit = $this->request->param('limit', 10); $where = [ ['isDel', '=', 0], ['status', '=', 1], ]; $query = TokensPackage::where($where); $total = $query->count(); $list = $query->where($where)->page($page, $limit)->order('sort ASC,id desc')->select(); foreach ($list as &$item) { $item['description'] = json_decode($item['description'], true); $item['discount'] = round(((($item['originalPrice'] - $item['price']) / $item['originalPrice']) * 100),2); $item['price'] = round( $item['price'], 2); $item['unitPrice'] = round( $item['price'] / $item['tokens'],6); $item['originalPrice'] = round($item['originalPrice'] / 100, 2); $item['tokens'] = number_format($item['tokens']); } unset($item); return ResponseHelper::success(['list' => $list, 'total' => $total]); } public function pay() { $id = $this->request->param('id', ''); $price = $this->request->param('price', ''); $userId = $this->getUserInfo('id'); $companyId = $this->getUserInfo('companyId'); if (empty($id) && empty($price)) { return ResponseHelper::error('套餐和自定义购买金额必须选一个'); } if (!empty($id)) { $package = TokensPackage::where(['id' => $id, 'status' => 1, 'isDel' => 0])->find(); if (empty($package)) { return ResponseHelper::error('套餐不存在或者已禁用'); } if ($package['price'] <= 0) { return ResponseHelper::error('套餐金额异常'); } $specs = [ 'id' => $package['id'], 'name' => $package['name'], 'price' => $package['price'], 'tokens' => $package['tokens'], ]; } else { //获取配置的tokens比例 $tokens_multiple = Env::get('payment.tokens_multiple', 28); $specs = [ 'id' => 0, 'name' => '自定义购买算力', 'price' => intval($price * 100), 'tokens' => intval($price * $tokens_multiple), ]; } $orderNo = date('YmdHis') . rand(100000, 999999); $order = [ 'companyId' => $companyId, 'userId' => $userId, 'orderNo' => $orderNo, 'goodsId' => $specs['id'], 'goodsName' => $specs['name'], 'goodsSpecs' => $specs, 'orderType' => 1, 'money' => $specs['price'] ]; $paymentService = new PaymentService(); $res = $paymentService->createOrder($order); $res = json_decode($res, true); if ($res['code'] == 200) { return ResponseHelper::success(['orderNo' => $orderNo, 'code_url' => $res['data']], '订单创建成功'); } else { return ResponseHelper::error($res['msg']); } } public function queryOrder() { $orderNo = $this->request->param('orderNo', ''); $order = Order::where('orderNo', $orderNo)->find(); if (!$order) { return ResponseHelper::error('该订单不存在'); } if ($order->status != 1) { $paymentService = new PaymentService(); $res = $paymentService->queryOrder($orderNo); $res = json_decode($res, true); if ($res['code'] == 200) { return ResponseHelper::success('','订单已支付'); } else { $errorMsg = !empty($order['payInfo']) ? $order['payInfo'] : '订单未支付'; return ResponseHelper::error($errorMsg); } } else { return ResponseHelper::success('','订单已支付'); } } /** * 获取订单列表 * @return \think\response\Json */ public function getOrderList() { try { $page = $this->request->param('page', 1); $limit = $this->request->param('limit', 10); $status = $this->request->param('status', ''); // 订单状态筛选 $keyword = $this->request->param('keyword', ''); // 关键词搜索(订单号) $orderType = $this->request->param('orderType', ''); // 订单类型筛选 $startTime = $this->request->param('startTime', ''); // 开始时间 $endTime = $this->request->param('endTime', ''); // 结束时间 $userId = $this->getUserInfo('id'); $companyId = $this->getUserInfo('companyId'); // 构建查询条件 $where = [ ['companyId', '=', $companyId] ]; // 关键词搜索(订单号、商品名称) if (!empty($keyword)) { $where[] = ['orderNo|goodsName', 'like', '%' . $keyword . '%']; } // 状态筛选 (0-待支付 1-已付款 2-已退款 3-付款失败) if ($status !== '') { $where[] = ['status', '=', $status]; } // 订单类型筛选 if ($orderType !== '') { $where[] = ['orderType', '=', $orderType]; } // 时间范围筛选 if (!empty($startTime)) { $where[] = ['createTime', '>=', strtotime($startTime)]; } if (!empty($endTime)) { $where[] = ['createTime', '<=', strtotime($endTime . ' 23:59:59')]; } // 分页查询 $query = Order::where($where) ->where(function($query) { $query->whereNull('deleteTime')->whereOr('deleteTime', 0); }); $total = $query->count(); $list = $query->field('id,orderNo,goodsId,goodsName,goodsSpecs,orderType,money,status,payType,payTime,createTime') ->order('id desc') ->page($page, $limit) ->select(); // 格式化数据 foreach ($list as &$item) { // 金额转换(分转元) $item['money'] = round($item['money'] / 100, 2); // 解析商品规格 if (!empty($item['goodsSpecs'])) { $specs = is_string($item['goodsSpecs']) ? json_decode($item['goodsSpecs'], true) : $item['goodsSpecs']; $item['goodsSpecs'] = $specs; // 添加算力数量 if (isset($specs['tokens'])) { $item['tokens'] = number_format($specs['tokens']); } } // 状态文本 $statusText = [ 0 => '待支付', 1 => '已付款', 2 => '已退款', 3 => '付款失败' ]; $item['statusText'] = $statusText[$item['status']] ?? '未知'; // 订单类型文本 $orderTypeText = [ 1 => '购买算力' ]; $item['orderTypeText'] = $orderTypeText[$item['orderType']] ?? '其他'; // 支付类型文本 $payTypeText = [ 1 => '微信支付', 2 => '支付宝' ]; $item['payTypeText'] = !empty($item['payType']) ? ($payTypeText[$item['payType']] ?? '未知') : ''; // 格式化时间 $item['createTime'] = $item['createTime'] ? date('Y-m-d H:i:s', $item['createTime']) : ''; $item['payTime'] = $item['payTime'] ? date('Y-m-d H:i:s', $item['payTime']) : ''; } unset($item); return ResponseHelper::success([ 'list' => $list, 'total' => $total, 'page' => $page, 'limit' => $limit ]); } catch (\Exception $e) { return ResponseHelper::error('获取订单列表失败:' . $e->getMessage()); } } }