lip 6 өдөр өмнө
parent
commit
8bee587e0b

+ 6 - 2
app/Console/Commands/Sport.php

@@ -57,11 +57,15 @@ class Sport extends Command
     public function handle()
     {
         // $data = SportClientService::odds([
-        //     'fixture' => 1530487,
+        //     'fixture' => 1517485,
         // ]);
-        // print_r($data);
         
         
+        // $data = SportClientService::oddsLive();
+        // // file_put_contents("1517485.json", json_encode($data));
+        // print_r($data);
+        // die;
+        
         $this->info('开始执行统计比赛数据任务...');
         
         $this->is_live = $this->argument('is_live');

+ 11 - 0
app/Console/Commands/SportOdds.php

@@ -6,6 +6,7 @@ use Illuminate\Console\Command;
 use App\Models\Sport as SportModel;
 use App\Services\SportClientService;
 use Illuminate\Support\Facades\Log;
+use App\Models\Config;
 
 class SportOdds extends Command
 {
@@ -118,6 +119,8 @@ class SportOdds extends Command
 
     public function updateOddsLive($data)
     {
+        //体育赛事结束前几(分钟)锁盘,90分钟结束
+        $sport_locked = Config::where('field', 'sport_locked')->first()->val ?? 1;
         if(!empty($data['response'])) {
             $data = $data['response'];
             foreach($data as $item) {
@@ -139,10 +142,18 @@ class SportOdds extends Command
                 if (isset($item['teams']['home']['goals'])) {
                     $update_data['score'] = $item['teams']['home']['goals'] ."-". $item['teams']['away']['goals'];
                 }
+                
                 //锁盘
                 if (isset($item['fixture']['status']['blocked']) && $item['fixture']['status']['blocked']) {
                     $update_data['is_locked'] = 1;
                 }
+                //提前锁盘(比赛进行时长,分钟)
+                if (isset($item['fixture']['status']['elapsed'])) {
+                    $elapsed = $item['fixture']['status']['elapsed'];
+                    if ((int)$elapsed >= 90 - $sport_locked ) {
+                       $update_data['is_locked'] = 1;
+                    }
+                }
                 //已结束
                 if (isset($item['fixture']['status']['finished']) && $item['fixture']['status']['finished']) {
                     $update_data['state'] = 2;

+ 53 - 0
app/Http/Controllers/admin/LhcOrder.php

@@ -4,8 +4,11 @@ namespace App\Http\Controllers\admin;
 
 use App\Http\Controllers\Controller;
 use App\Models\LhcOrder as LhcOrderModel;
+use App\Models\FundsRecord;
+use App\Models\Wallet;
 use Exception;
 use App\Constants\HttpStatus;
+use Illuminate\Support\Facades\DB;
 
 class LhcOrder extends Controller
 {
@@ -85,4 +88,54 @@ class LhcOrder extends Controller
         return $this->success($order);
     }
 
+    /**
+     * @api {post} /lhcorder/refund 同意退款
+     * @apiGroup 订单管理
+     */
+    public function refund()
+    {
+        $errors = [];
+        try {
+            DB::beginTransaction();
+            $params = request()->validate([
+                'id' => ['required', 'array', 'min:1'],
+            ]);
+            $orderList = LhcOrderModel::whereIn('id', $params['id'])->get();
+            foreach ($orderList as $order) {
+                if ($order->lottery_status != 0) {
+                    continue;
+                }
+                
+                $order->lottery_status = 4;
+                $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();
+                
+                FundsRecord::addData([
+                    'change_type' => '退款',
+                    'amount' => $order->amount,
+                    'before_balance' => $before,
+                    'after_balance' => $after,
+                    'member_id' => $order->user_id,
+                    'related_id' => $order->id,
+                    'remark' => '六合彩订单退款',
+                ]);
+            }
+            DB::commit();
+        } catch (Exception $e) {
+            DB::rollBack();
+            return $this->error(HttpStatus::CUSTOM_ERROR,$e->getMessage(), $errors);
+        }
+        return $this->success();
+
+    }
+
 }

+ 24 - 108
app/Http/Controllers/admin/Order.php

@@ -5,53 +5,52 @@ namespace App\Http\Controllers\admin;
 use App\Http\Controllers\Controller;
 use App\Models\FundsRecord;
 use App\Models\User;
-use App\Models\Admin;
 use App\Models\Order as OrderModel;
 use Exception;
 use Illuminate\Support\Facades\DB;
 use App\Constants\HttpStatus;
+use App\Models\Wallet;
 
 class Order extends Controller
 {
     /**
      * 订单手动退款
      */
-    public function adminRefund()
+    public function refund()
     {
         DB::beginTransaction();
         try {
             $params = request()->validate([
-                'order_id' => ['required', 'array', 'min:1'],
-                'safe_word' => ['required', 'string'],
+                'id' => ['required', 'array', 'min:1'],
             ]);
-            $id = request()->user->id;
-            $admin = Admin::where('id', $id)->first();
-            if (!password_verify($params['safe_word'], $admin->payment_password)) throw new Exception('资金密码错误');
-
-            $orderList = OrderModel::whereIn('id', $params['order_id'])->get();
+            $orderList = OrderModel::whereIn('id', $params['id'])->get();
             foreach ($orderList as $order) {
-                if ($order->return_status != 0 || $order->pay_status != 1) {
+                if ($order->return_status != 0 || $order->pay_status != 1 || $order->settlement_status != 0) {
                     continue;
                 }
                 
-                $order->status = 3;
+                $order->status = 2;
                 $order->return_status = 2;
                 $order->return_operation_time = time();
                 $order->save();
-
-                $user = User::where('user_id', $order->user_id)->first();
-                if (!$user) continue;
-                if ($user->type == 1) {
-                    FundsRecord::addData([
-                        'transaction_type' => '退款',
-                        'amount' => $order->amount,
-                        'before_balance' => $user->money,
-                        'after_balance' => bcsub($user->money, $order->amount, 2),
-                        'member_id' => $user->user_id,
-                    ]);
-                    $user->money = bcsub($user->money, $order->amount, 2);
-                    $user->save();
-                }
+                // 获取用户余额
+                $walletInfo = Wallet::where(['member_id' => $order->user_id])->first();
+                if (!$walletInfo) continue;
+                
+                $before = $walletInfo->available_balance;
+                $after = bcsub($walletInfo->available_balance, $order->amount, 2);
+                $walletInfo->available_balance = $after;
+                $walletInfo->save();
+                
+                FundsRecord::addData([
+                    'change_type' => '退款',
+                    'amount' => $order->amount,
+                    'before_balance' => $before,
+                    'after_balance' => $after,
+                    'member_id' => $order->user_id,
+                    'related_id' => $order->id,
+                    'remark' => '体彩订单退款',
+                ]);
             }
 
             DB::commit();
@@ -62,89 +61,6 @@ class Order extends Controller
         return $this->success();
     }
 
-    /**
-     * @api {post} /order/refund 同意退款
-     * @apiGroup 订单管理
-     */
-    public function refund()
-    {
-        $errors = [];
-        try {
-            DB::beginTransaction();
-            $params = request()->validate([
-                'order_id' => ['required', 'array', 'min:1'],
-                'safe_word' => ['required', 'string'],
-            ]);
-            $order_id = $params['order_id'];
-            $safeWord = $params['safe_word'];
-            $id = request()->user()->id;
-            $admin = Admin::where('id', $id)->first();
-            if (!password_verify($safeWord, $admin->payment_password)) throw new Exception('资金密码错误');
-            $order = OrderModel::where('id', $order_id)->first();
-            if (!$order) throw new Exception('订单不存在');
-            if ($order->return_status != 1 || $order->pay_status != 1) {
-                $errors = ['id' => $order_id];
-                throw new Exception("该订单状态无法操作");
-            }
-            
-            $order->status = 3;
-            $order->return_status = 2;
-            $order->return_operation_time = time();
-            $order->save();
-
-            $user = User::where('user_id', $order->user_id)->first();
-            $balanceAfter = bcadd($user->money, $order->amount, 2);
-            FundsRecord::addData([
-                'transaction_type' => '退款',
-                'amount' => $order->amount,
-                'before_balance' => $user->money,
-                'after_balance' => bcsub($user->money, $order->amount, 2),
-                'member_id' => $user->user_id,
-            ]);
-            $user->money = $balanceAfter;
-            $user->save();
-
-            DB::commit();
-        } catch (Exception $e) {
-            DB::rollBack();
-            return $this->error(HttpStatus::CUSTOM_ERROR,$e->getMessage(), $errors);
-        }
-        return $this->success();
-
-    }
-
-    /**
-     * 驳回退款申请
-     * @apiGroup 订单管理
-     */
-    public function rejection()
-    {
-        $errors = [];
-        DB::beginTransaction();
-        try {
-            $params = request()->validate([
-                'order_id' => ['required', 'array', 'min:1'],
-                'failure_msg' => ['nullable', 'string', 'max:200'],
-            ]);
-            if (empty($params['failure_msg'])) $params['failure_msg'] = '';
-
-            $order = OrderModel::where('id', $params['order_id'])->first();
-            if (!$order) throw new Exception('订单不存在');
-            if ($order->status != 1 || $order->return_status != 1) {
-                $errors = ['id' => $params['order_id']];
-                throw new Exception("该订单状态无法操作");
-            }
-            $order->return_operation_time = time();
-            $order->failure_msg = $params['failure_msg'];
-            $order->save();
-            DB::commit();
-        } catch (Exception $e) {
-            DB::rollBack();
-            return $this->error(HttpStatus::CUSTOM_ERROR,$e->getMessage(), $errors);
-        }
-        return $this->success();
-    }
-
     /**
      * 订单列表
      */

+ 31 - 4
app/Http/Controllers/admin/Sport.php

@@ -77,7 +77,7 @@ class Sport extends Controller
     }
 
     //详情
-    function info()
+    public function info()
     {
         try {
             request()->validate([
@@ -87,13 +87,12 @@ class Sport extends Controller
             $info = SportModel::where('id', $id)->first();
             if (!$info) throw new Exception('赛事不存在');
             $info = $info->toArray();
+            $info['date'] = date('Y-m-d',$info['game_time']);
+            $info['time'] = date('H:i',$info['game_time']);
             $info['game_time'] = date('Y-m-d H:i:s', $info['game_time']);
             $info['rbt'] = date('Y-m-d H:i:s', $info['rbt']);
             $info['fixture_status'] = json_decode($info['fixture_status'], true);
 
-            
-            $info['date'] = date('Y-m-d',$info['game_time']);
-            $info['time'] = date('H:i',$info['game_time']);
             $info['odds'] = $info['odds'] ? json_decode($info['odds'], true) : null;
 
         } catch (Exception $e) {
@@ -102,4 +101,32 @@ class Sport extends Controller
         return $this->success($info);
     }
 
+    public function setStatus()
+    {
+        try {
+            $params = request()->validate([
+                'id' => ['required', 'integer'],
+                'status' => ['nullable', 'integer'],
+                'state' => ['nullable', 'integer'],
+                'is_locked' => ['nullable', 'integer'],
+            ]);
+            $id = $params['id'];
+            $info = SportModel::where('id', $id)->first();
+            if (!$info) throw new Exception('赛事不存在');
+            if (isset($params['state']) && $params['state'] !== null) {
+                $info->state = $params['state'];
+            }
+            if (isset($params['is_locked']) && $params['is_locked'] !== null) {
+                $info->is_locked = $info->is_locked ? 0 : 1;
+            }
+            if (isset($params['status']) && $params['status'] !== null) {
+                $info->status = $info->status ? 0 : 1;
+            }
+            $info->save();
+            return $this->success();
+        } catch (Exception $e) {
+            return $this->error(HttpStatus::CUSTOM_ERROR,$e->getMessage());
+        }
+    }
+
 }

+ 4 - 16
app/Models/FundsRecord.php

@@ -1,24 +1,12 @@
 <?php
 namespace App\Models;
-
-// // 关键:导入正确的 Builder 类(Eloquent 构建器)
-// use Illuminate\Database\Eloquent\Builder;
 class FundsRecord extends BaseModel
 {
     protected $table = 'balance_logs';
     protected $fillable = ['id', 'room_id', 'member_id' ,'amount' ,'before_balance' ,'after_balance' ,'change_type','created_at','remark'];
 
-    // public function newQuery($excludeDeleted = true): Builder
-    // {
-    //     // 1. 获取原生 Eloquent 查询构建器
-    //     $query = parent::newQuery($excludeDeleted);
-        
-    //     // 2. 强制清空当前连接的表前缀(从根源阻止拼接)
-    //     $this->getConnection()->setTablePrefix('');
-        
-    //     // 3. 强制指定查询的表名为 la_operation(覆盖所有拼接逻辑)
-    //     $query->from('bot_balance_logs');
-        
-    //     return $query;
-    // }
+    public static function addData($data)
+    {
+        return self::create($data);
+    }
 }

+ 2 - 2
routes/admin.php

@@ -219,9 +219,7 @@ Route::middleware(['admin.jwt'])->group(function () {
         });
 
         Route::prefix('/order')->group(function () {
-            Route::post('/adminRefund', [Order::class, 'adminRefund']);
             Route::post('/refund', [Order::class, 'refund']);
-            Route::post('/rejection', [Order::class, 'rejection']);
             Route::get('/list', [Order::class, 'list']);
             Route::get('/info', [Order::class, 'info']);
         });
@@ -238,6 +236,7 @@ Route::middleware(['admin.jwt'])->group(function () {
         Route::prefix('/lhcOrder')->group(function () {
             Route::get('/list', [LhcOrder::class, 'list']);
             Route::get('/info', [LhcOrder::class, 'info']);
+            Route::post('/refund', [LhcOrder::class, 'refund']);
         });
         Route::prefix('/lhcNumber')->group(function () {
             Route::get('/list', [LhcNumber::class, 'list']);
@@ -250,6 +249,7 @@ Route::middleware(['admin.jwt'])->group(function () {
         Route::prefix('/sport')->group(function () {
             Route::get('/list', [Sport::class, 'list']);
             Route::get('/info', [Sport::class, 'info']);
+            Route::post('/setStatus', [Sport::class, 'setStatus']);
         });