| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- <?php
- declare (strict_types = 1);
- namespace app\api\controller;
- use app\BaseController;
- use app\model\api\ChatBalanceLog;
- use app\model\api\ChatOrder;
- use app\model\api\User as UserModel;
- use app\Request;
- use app\services\chat\ChatBalanceService;
- /**
- * 聊天次数购买控制器
- */
- class ChatBuy extends BaseController
- {
- /**
- * 获取购买配置信息
- */
- public function config(Request $request)
- {
- $price = ChatBalanceService::getBuyPrice();
- $balance = ChatBalanceService::getBalance($request->user['uid']);
-
- return app('json')->success('获取成功', [
- 'price' => $price, // 单次购买价格(积分)
- 'balance' => $balance, // 当前剩余次数
- ]);
- }
-
- /**
- * 创建购买订单
- */
- public function createOrder(Request $request)
- {
- $data = $request->post();
- $chatNum = (int)($data['chat_num'] ?? 1);
- $userId = $request->user['uid'];
-
- if ($chatNum <= 0) {
- return app('json')->fail('购买数量必须大于0');
- }
-
- $price = ChatBalanceService::getBuyPrice();
- if ($price <= 0) {
- return app('json')->fail('购买价格未设置');
- }
-
- $totalPrice = $price * $chatNum;
-
- // 检查用户积分是否足够
- $userScore = (float)(new UserModel)->where('uid', $userId)->value('score');
- if ($userScore < $totalPrice) {
- return app('json')->fail('积分不足,当前积分:' . $userScore);
- }
-
- // 创建订单
- $order = ChatOrder::createOrder($userId, $chatNum, $totalPrice);
-
- if (!$order) {
- return app('json')->fail('订单创建失败');
- }
-
- // 立即支付(积分支付,无需跳转)
- $result = ChatBalanceService::buyWithScore($userId, $chatNum, $order);
-
- if (!$result) {
- // 支付失败,取消订单
- ChatOrder::cancelOrder((int)$order->id);
- return app('json')->fail('支付失败');
- }
-
- // 更新订单状态
- ChatOrder::paySuccess((int)$order->id);
-
- $newBalance = ChatBalanceService::getBalance($userId);
-
- return app('json')->success('购买成功', [
- 'order_id' => $order->id,
- 'order_no' => $order->order_no,
- 'chat_num' => $chatNum,
- 'price' => $totalPrice,
- 'balance' => $newBalance,
- ]);
- }
-
- /**
- * 获取当前聊天次数余额
- */
- public function balance(Request $request)
- {
- $balance = ChatBalanceService::getBalance($request->user['uid']);
-
- return app('json')->success('获取成功', [
- 'balance' => $balance,
- ]);
- }
-
- /**
- * 获取购买记录列表
- */
- public function orderList(Request $request)
- {
- $data = $request->get();
- $page = (int)($data['page'] ?? 1);
- $limit = (int)($data['limit'] ?? 10);
-
- $result = ChatOrder::getUserOrders($request->user['uid'], $page, $limit);
-
- // 处理订单状态文本
- foreach ($result['list'] as &$item) {
- $item['status_text'] = ChatOrder::getStatusText($item['status']);
- }
-
- return app('json')->success('获取成功', $result);
- }
-
- /**
- * 获取变动明细列表
- */
- public function balanceLogList(Request $request)
- {
- $data = $request->get();
- $page = (int)($data['page'] ?? 1);
- $limit = (int)($data['limit'] ?? 10);
-
- $result = ChatBalanceLog::getUserLogs($request->user['uid'], $page, $limit);
-
- return app('json')->success('获取成功', $result);
- }
- }
|