lip 2 settimane fa
parent
commit
7ea7ffb9a3

+ 71 - 0
app/Http/Controllers/admin/JisuGame.php

@@ -0,0 +1,71 @@
+<?php
+
+namespace App\Http\Controllers\admin;
+
+use App\Http\Controllers\Controller;
+use App\Models\JisuGameplay;
+use Exception;
+use App\Constants\HttpStatus;
+
+class JisuGame extends Controller
+{
+    /**
+     * 足球游戏列表,树形结构
+     */
+    public function list()
+    {
+        try {
+            $params = request()->validate([
+                'type' => ['required','integer'],
+            ]);
+            $list = JisuGameplay::getGame($params['type']);
+        } catch (Exception $e) {
+            return $this->error(HttpStatus::CUSTOM_ERROR,$e->getMessage());
+        }
+        return $this->success([ 'data' => $list]);
+
+    }
+
+    //设置赔率
+    public function setOdds()
+    {
+        try {
+            $params = request()->validate([
+                'id' => ['nullable','integer'],
+                'game' => ['nullable','string'],
+                'gameplay' => ['nullable','string'],
+                'type' => ['nullable','integer'],
+                'odds' => ['required','numeric'],
+                'maxinum' => ['required','numeric'],
+                'mininum' => ['required','numeric'],
+            ]);
+            if (!empty($params['id'])) {
+                $info = JisuGameplay::where('id', $params['id'])->first();
+                if (!$info) throw new Exception('数据不存在');
+                $info->odds = $params['odds'];
+                $info->maxinum = $params['maxinum'];
+                $info->mininum = $params['mininum'];
+                $info->save();
+            } elseif (!empty($params['game']) && !empty($params['type'])) {
+                JisuGameplay::where('game', $params['game'])->where('type', $params['type'])->update([
+                    'odds' => $params['odds'],
+                    'maxinum' => $params['maxinum'],
+                    'mininum' => $params['mininum'],
+                ]);
+            } elseif (!empty($params['gameplay']) && !empty($params['type'])) {
+                JisuGameplay::where('gameplay', $params['gameplay'])->where('type', $params['type'])->update([
+                    'odds' => $params['odds'],
+                    'maxinum' => $params['maxinum'],
+                    'mininum' => $params['mininum'],
+                ]);
+            } else {
+                throw new Exception('参数错误');
+            }
+            return $this->success();
+        } catch (Exception $e) {
+            return $this->error(HttpStatus::CUSTOM_ERROR,$e->getMessage());
+        }
+    }
+
+
+}

+ 155 - 0
app/Http/Controllers/admin/JisuGameOrder.php

@@ -0,0 +1,155 @@
+<?php
+
+namespace App\Http\Controllers\admin;
+
+use App\Http\Controllers\Controller;
+use App\Models\JisuGameOrder as JisuGameOrderModel;
+use App\Models\FundsRecord;
+use App\Models\JisuGameplay;
+use App\Models\Wallet;
+use Exception;
+use App\Constants\HttpStatus;
+use Illuminate\Support\Facades\DB;
+
+class JisuGameOrder extends Controller
+{
+
+    /**
+     * 订单列表
+     */
+    public function list()
+    {
+        try {
+            $params = request()->validate([
+                'page' => ['nullable', 'integer', 'min:1'],
+                'limit' => ['nullable', 'integer', 'min:1'],
+                'ordernum' => ['nullable', 'string'],
+                'member_id' => ['nullable', 'integer'],
+                'first_name' => ['nullable'],
+                'game' => ['nullable', 'string'],
+                'gameplay' => ['nullable', 'string'],
+                'status' => ['nullable', 'integer'],
+                'id' => ['nullable', 'integer'],
+                'start_time' => ['nullable', 'date', 'date_format:Y-m-d', 'required_with:end_time'],
+                'end_time' => ['nullable', 'date', 'date_format:Y-m-d', 'required_with:start_time'],
+            ]);
+            $page = request()->input('page', 1);
+            $limit = request()->input('limit', 15);
+
+            $query = new JisuGameOrderModel();
+            
+            $query = JisuGameOrderModel::join('users', 'users.member_id', '=', 'jisu_game_order.member_id')
+                        ->join('jisu_gameplay', 'jisu_gameplay.id', '=', 'jisu_game_order.gameplay_id');
+            if (!empty($params['id'])) {
+                $query = $query->where('jisu_game_order.id', $params['id']);
+            }
+            if (!empty($params['ordernum'])) {
+                $query = $query->where('jisu_game_order.ordernum', $params['ordernum']);
+            }
+            if (!empty($params['member_id'])) {
+                $query = $query->where('jisu_game_order.member_id', $params['member_id']);
+            }
+            if (isset($params['status']) && $params['status'] !== null) {
+                $query = $query->where('jisu_game_order.status', $params['status']);
+            }
+            if (!empty($params['game'])) {
+                $query = $query->where('jisu_gameplay.game', 'like', '%'.$params['game'].'%');
+            }
+            if (!empty($params['gameplay'])) {
+                $query = $query->where('jisu_gameplay.gameplay', 'like', '%'.$params['gameplay'].'%');
+            }
+            if (!empty($params['first_name'])) {
+                $query = $query->where('users.first_name', 'like', "%{$params['first_name']}%");
+            }
+            if (!empty($params['start_time'])) {
+                $startTime = $params['start_time'] . " 00:00:00";
+                $query = $query->where('sport_game_order.created_at', '>=', $startTime);
+            }
+            if (!empty($params['end_time'])) {
+                $endTime = $params['end_time'] . " 23:59:59";
+                $query = $query->where('sport_game_order.created_at', '<=', $endTime);
+            }
+            $count = $query->count();
+            $list = $query->select('jisu_game_order.*','users.first_name','users.member_id', 'jisu_gameplay.game', 'jisu_gameplay.gameplay')
+                ->forPage($page, $limit)
+                ->orderByDesc('jisu_game_order.created_at')
+                ->get();
+        } catch (Exception $e) {
+            return $this->error(HttpStatus::CUSTOM_ERROR,$e->getMessage());
+        }
+        return $this->success(['total' => $count, 'data' => $list]);
+
+    }
+
+    //订单详情
+    function info()
+    {
+        try {
+            request()->validate([
+                'id' => ['required', 'integer'],
+            ]);
+            $id = request()->input('id');
+            $order = JisuGameOrderModel::join('users', 'users.member_id', '=', 'jisu_game_order.member_id')
+                        ->join('jisu_gameplay', 'jisu_gameplay.id', '=', 'jisu_game_order.gameplay_id')
+                        ->where('jisu_game_order.id', $id)
+                        ->select('jisu_game_order.*','users.first_name','users.member_id', 'jisu_gameplay.game', 'jisu_gameplay.gameplay')
+                        ->first();
+            if (!$order) throw new Exception('订单不存在');
+            $order = $order->toArray();
+        } catch (Exception $e) {
+            return $this->error(HttpStatus::CUSTOM_ERROR,$e->getMessage());
+        }
+        return $this->success($order);
+    }
+
+    /**
+     * 同意退款
+     */
+    public function refund()
+    {
+        $errors = [];
+        try {
+            DB::beginTransaction();
+            $params = request()->validate([
+                'id' => ['required', 'array', 'min:1'],
+                'remark' => ['nullable', 'string'],
+            ]);
+            $orderList = JisuGameOrderModel::whereIn('id', $params['id'])->get();
+            foreach ($orderList as $order) {
+                if ($order->status != 0) {
+                    continue;
+                }
+                
+                $order->status = 3;
+                $order->updated_at = time();
+                $order->save();
+
+                // 获取用户余额
+                $walletInfo = Wallet::where(['member_id' => $order->member_id])->first();
+                if (!$walletInfo) continue;
+                
+                $before = $walletInfo->available_balance;
+                $after = bcsub($walletInfo->available_balance, $order->amount, 2);
+                $walletInfo->available_balance = $after;
+                $walletInfo->save();
+                $remark = JisuGameplay::getRemark($order->type);
+                FundsRecord::addData([
+                    'change_type' => $remark.'退款',
+                    'amount' => $order->amount,
+                    'before_balance' => $before,
+                    'after_balance' => $after,
+                    'member_id' => $order->user_id,
+                    'related_id' => $order->id,
+                    'remark' => $remark.'退款',
+                ]);
+            }
+            DB::commit();
+        } catch (Exception $e) {
+            DB::rollBack();
+            return $this->error(HttpStatus::CUSTOM_ERROR,$e->getMessage(), $errors);
+        }
+        return $this->success();
+
+    }
+
+}

+ 9 - 0
app/Models/JisuGameOrder.php

@@ -0,0 +1,9 @@
+<?php
+
+namespace App\Models;
+
+class JisuGameOrder extends BaseModel
+{
+    protected $table = 'jisu_game_order';
+    protected $fillable = ['ordernum', 'gameplay_id', 'member_id','odds','amount','status','win_amount','profit_and_loss','remark'];
+}

+ 53 - 0
app/Models/JisuGameplay.php

@@ -0,0 +1,53 @@
+<?php
+
+namespace App\Models;
+
+class JisuGameplay extends BaseModel
+{
+    protected $table = 'jisu_gameplay';
+    protected $fillable = [ 'game', 'game_en', 'gameplay', 'gameplay_en', 'number', 'number_en', 'odds','type','maxinum','mininum'];
+    
+    public static function getGame($type) {
+        $list = JisuGameplay::where('type',$type)->select()->toArray();
+        $tree = [];
+        foreach($list as $k => $item) {
+            if (!isset($tree[$item['game']])) {
+                $tree[$item['game']] = [
+                    'name' => $item['game'],
+                    'name_en' => $item['game_en'],
+                ];
+            }
+
+            if (!isset($tree[$item['game']]['children'][$item['gameplay']])) {
+                $tree[$item['game']]['children'][$item['gameplay']] = [
+                    'name' => $item['gameplay'],
+                    'name_en' => $item['gameplay_en'],
+                ];
+            }
+            $tree[$item['game']]['children'][$item['gameplay']]['children'][] = [
+                'name' => $item['number'],
+                'name_en' => $item['number_en'],
+                'odds' => $item['odds'],
+                'maxinum' => $item['maxinum'],
+                'mininum' => $item['mininum'],
+            ];
+        }
+        $tree = array_values($tree);
+        foreach ($tree as $k=> &$item) {
+            
+                $item['children'] = array_values($item['children']);
+            
+        }
+        return ($tree);
+    }
+
+    public static function getRemark($type) {
+        if ($type == 1) {
+            return '极速赛车';
+        } elseif ($type == 2) {
+            return '极速时时彩';
+        } elseif ($type == 3) {
+            return '3极速飞艇';
+        }
+    }
+}