Tree 2 hete
szülő
commit
95457bc342

+ 1 - 3
app/Console/Commands/ExemptReview.php

@@ -133,9 +133,7 @@ class ExemptReview extends Command
             if (true) {
 
                 if($value->PixType == 2){
-//                    $agent = 105;
-//                    $agent = 101;
-                    rand(1,100)>70?$agent = 100:$agent = 105;
+                    rand(1,100)>70?$agent = 99:$agent = 105;
                 }else{
                     if(($value->WithDraw/NumConfig::NUM_VALUE)<55){
                         $agent = 99;

+ 131 - 0
app/Http/Controllers/Admin/WithdrawalController.php

@@ -1191,6 +1191,137 @@ class WithdrawalController extends BaseController
         }
     }
 
+    /**
+     * 获取订单账号信息(用于编辑)
+     */
+    public function getAccountInfo($RecordID)
+    {
+        try {
+            $order = DB::connection('read')->table('QPAccountsDB.dbo.OrderWithDraw')
+                ->where('RecordID', $RecordID)
+                ->first();
+
+            if (!$order) {
+                return apiReturnFail('订单不存在');
+            }
+
+            // 检查订单状态
+            if ($order->State != 6) {
+                return apiReturnFail('只能编辑失败订单的账号信息');
+            }
+
+            return apiReturnSuc([
+                'RecordID' => $order->RecordID,
+                'UserID' => $order->UserID,
+                'BankUserName' => $order->BankUserName ?? '',
+                'EmailAddress' => $order->EmailAddress ?? '',
+                'PhoneNumber' => $order->PhoneNumber ?? '',
+                'PixNum' => $order->PixNum ?? '',
+                'PixType' => $order->PixType ?? 0,
+                'BankNO' => $order->BankNO ?? '',
+                'AccountsBank' => $order->AccountsBank ?? '',
+                'IFSCNumber' => $order->IFSCNumber ?? '',
+                'PANNumber' => $order->PANNumber ?? '',
+                'AdhaarNumber' => $order->AdhaarNumber ?? '',
+                'BranchBank' => $order->BranchBank ?? '',
+            ]);
+        } catch (\Exception $e) {
+            Log::error('获取订单账号信息失败', [
+                'RecordID' => $RecordID,
+                'error' => $e->getMessage()
+            ]);
+            return apiReturnFail('获取信息失败:' . $e->getMessage());
+        }
+    }
+
+    /**
+     * 更新订单账号信息(同时更新OrderWithDraw和AccountWithDrawInfo)
+     */
+    public function updateAccountInfo(Request $request, $RecordID)
+    {
+        try {
+            $validator = Validator::make($request->all(), [
+                'BankUserName' => 'nullable|string|max:100',
+                'EmailAddress' => 'nullable|string|max:80',
+                'PhoneNumber' => 'nullable|string|max:20',
+                'PixNum' => 'nullable|string|max:32',
+                'PixType' => 'nullable|integer|in:0,1,2,3',
+                'BankNO' => 'nullable|string|max:30',
+                'AccountsBank' => 'nullable|string|max:100',
+                'IFSCNumber' => 'nullable|string|max:20',
+                'PANNumber' => 'nullable|string|max:10',
+                'AdhaarNumber' => 'nullable|string|max:80',
+                'BranchBank' => 'nullable|string|max:100',
+            ]);
+
+            if ($validator->fails()) {
+                return apiReturnFail($validator->errors()->first());
+            }
+
+            // 获取订单信息
+            $order = DB::connection('read')->table('QPAccountsDB.dbo.OrderWithDraw')
+                ->where('RecordID', $RecordID)
+                ->first();
+
+            if (!$order) {
+                return apiReturnFail('订单不存在');
+            }
+
+            // 检查订单状态
+            if ($order->State != 6) {
+                return apiReturnFail('只能编辑失败订单的账号信息');
+            }
+
+            // 准备更新数据
+            $updateData = [];
+            $fields = [
+                'BankUserName', 'EmailAddress', 'PhoneNumber', 'PixNum', 'PixType',
+                'BankNO', 'AccountsBank', 'IFSCNumber', 'PANNumber', 'AdhaarNumber', 'BranchBank'
+            ];
+
+            foreach ($fields as $field) {
+                if ($request->has($field)) {
+                    $updateData[$field] = trim($request->input($field, ''));
+                }
+            }
+
+            if (empty($updateData)) {
+                return apiReturnFail('没有需要更新的数据');
+            }
+
+            DB::beginTransaction();
+            try {
+                // 更新 OrderWithDraw 表
+                DB::connection('write')->table('QPAccountsDB.dbo.OrderWithDraw')
+                    ->where('RecordID', $RecordID)
+                    ->update($updateData);
+
+                // 更新 AccountWithDrawInfo 表
+                DB::connection('write')->table('QPAccountsDB.dbo.AccountWithDrawInfo')
+                    ->where('UserID', $order->UserID)
+                    ->update($updateData);
+
+                DB::commit();
+
+                // 记录操作日志
+                $admin_id = session('admin')->id ?? 0;
+                (new AccountsRecordLogic())->create_record($RecordID, $order->State, $order->State, '编辑提款账号信息', $admin_id, 2);
+
+                return apiReturnSuc(['updated_fields' => array_keys($updateData)], '更新成功');
+            } catch (\Exception $e) {
+                DB::rollBack();
+                throw $e;
+            }
+        } catch (\Exception $e) {
+            Log::error('更新订单账号信息失败', [
+                'RecordID' => $RecordID,
+                'error' => $e->getMessage(),
+                'data' => $request->all()
+            ]);
+            return apiReturnFail('更新失败:' . $e->getMessage());
+        }
+    }
+
     public function withdrawRank(Request $request)
     {
         $date = Carbon::now();

+ 31 - 11
app/Http/Controllers/Game/ActivityController.php

@@ -189,21 +189,41 @@ class ActivityController extends Controller
     {
         $user=$request->user();
         $UserID=$user->UserID;
-        $res=DB::connection('sqlsrv')->select("exec QPAccountsDB.dbo.GSP_GP_GetUserSignInInfo $UserID");
-        $res2=DB::table('QPAccountsDB.dbo.UserSignInInfo')->where('UserID',$UserID)->first();
-        $max=count($res);
-        $res2=(array)$res2;
+        
+        // 使用 Redis 进程锁防止并发调用存储过程导致主键冲突
+        $lockKey = 'checkin_get_info_' . $UserID;
+        $lockAcquired = SetNXLock::getExclusiveLock($lockKey, 5);
+        
+        if (!$lockAcquired) {
+            // 如果获取锁失败,等待一小段时间后重试一次
+//            usleep(100000); // 等待 100ms
+            $lockAcquired = SetNXLock::getExclusiveLock($lockKey, 5);
+            if (!$lockAcquired) {
+                // 如果还是获取不到锁,返回错误
+                return apiReturnFail(['web.checkin.try_again_later', 'Please try again later']);
+            }
+        }
+        
+        try {
+            $res=DB::connection('sqlsrv')->select("exec QPAccountsDB.dbo.GSP_GP_GetUserSignInInfo $UserID");
+            $res2=DB::table('QPAccountsDB.dbo.UserSignInInfo')->where('UserID',$UserID)->first();
+            $max=count($res);
+            $res2=(array)$res2;
 
-        if($res2['NextDayNumber']>$max) {
-            $res2['NextDayNumber']= $res2['NextDayNumber'] % $max + 1;
-            $res2['RecordDay']='';
-            for($i=0;$i<$max;$i++) {
+            if($res2['NextDayNumber']>$max) {
+                $res2['NextDayNumber']= $res2['NextDayNumber'] % $max + 1;
+                $res2['RecordDay']='';
+                for($i=0;$i<$max;$i++) {
 
-                $res2['RecordDay'].=$i<($res2['NextDayNumber']-1)?'1':'0';
+                    $res2['RecordDay'].=$i<($res2['NextDayNumber']-1)?'1':'0';
+                }
             }
+            $res2['config']=$res;
+            return apiReturnSuc($res2);
+        } finally {
+            // 确保释放锁
+            SetNXLock::release($lockKey);
         }
-        $res2['config']=$res;
-        return apiReturnSuc($res2);
 
     }
     public function GetCheckInInfo(Request $request)

+ 129 - 0
resources/views/admin/Withdrawal/verify_finish.blade.php

@@ -293,6 +293,14 @@
                                                     {{ __('auto.同步最新提款账号信息') }}
                                                 </a>
                                             @endif
+                                            @if($item->State == 6)
+                                                <br>
+                                                <a class="btn btn-sm btn-gradient-warning btn-icon-text edit-account-info"
+                                                   data-record-id="{{$item->RecordID}}"
+                                                   href="javascript:void(0);">
+                                                    {{ __('auto.编辑提款账号') }}
+                                                </a>
+                                            @endif
                                         </td>
 
                                         <td>
@@ -567,5 +575,126 @@
 
             return false;
         });
+
+        // 编辑账号信息
+        $(document).on('click', '.edit-account-info', function() {
+            var recordId = $(this).data('record-id');
+            var $btn = $(this);
+
+            if (!recordId) {
+                layer.msg('订单ID不存在');
+                return false;
+            }
+
+            // 获取账号信息
+            $.ajax({
+                type: 'GET',
+                url: '/admin/withdrawal/get_account_info/' + recordId,
+                success: function(res) {
+                    if (res.code == 200) {
+                        var data = res.data;
+                        // 构建表单HTML
+                        var formHtml = '<form id="editAccountForm" style="padding: 20px;">' +
+                            '<div class="form-group">' +
+                            '<label>Pix Type:</label>' +
+                            '<select name="PixType" class="form-control" id="editPixType">' +
+                            '<option value="0"' + (data.PixType == 0 ? ' selected' : '') + '>None</option>' +
+                            '<option value="1"' + (data.PixType == 1 ? ' selected' : '') + '>CPF/CNPJ</option>' +
+                            '<option value="2"' + (data.PixType == 2 ? ' selected' : '') + '>Email</option>' +
+                            '<option value="3"' + (data.PixType == 3 ? ' selected' : '') + '>Phone</option>' +
+                            '</select>' +
+                            '</div>' +
+                            '<div class="form-group">' +
+                            '<label>Bank User Name:</label>' +
+                            '<input type="text" name="BankUserName" class="form-control" value="' + (data.BankUserName || '') + '">' +
+                            '</div>' +
+                            '<div class="form-group">' +
+                            '<label>Email Address:</label>' +
+                            '<input type="text" name="EmailAddress" class="form-control" value="' + (data.EmailAddress || '') + '">' +
+                            '</div>' +
+                            '<div class="form-group">' +
+                            '<label>Phone Number:</label>' +
+                            '<input type="text" name="PhoneNumber" class="form-control" value="' + (data.PhoneNumber || '') + '">' +
+                            '</div>' +
+                            '<div class="form-group">' +
+                            '<label>Pix Number:</label>' +
+                            '<input type="text" name="PixNum" class="form-control" value="' + (data.PixNum || '') + '">' +
+                            '</div>' +
+                            '<div class="form-group">' +
+                            '<label>Bank NO:</label>' +
+                            '<input type="text" name="BankNO" class="form-control" value="' + (data.BankNO || '') + '">' +
+                            '</div>' +
+                            '<div class="form-group">' +
+                            '<label>Accounts Bank:</label>' +
+                            '<input type="text" name="AccountsBank" class="form-control" value="' + (data.AccountsBank || '') + '">' +
+                            '</div>' +
+                            '<div class="form-group">' +
+                            '<label>IFSC Number:</label>' +
+                            '<input type="text" name="IFSCNumber" class="form-control" value="' + (data.IFSCNumber || '') + '">' +
+                            '</div>' +
+                            '<div class="form-group">' +
+                            '<label>PAN Number:</label>' +
+                            '<input type="text" name="PANNumber" class="form-control" value="' + (data.PANNumber || '') + '">' +
+                            '</div>' +
+                            '<div class="form-group">' +
+                            '<label>Adhaar Number:</label>' +
+                            '<input type="text" name="AdhaarNumber" class="form-control" value="' + (data.AdhaarNumber || '') + '">' +
+                            '</div>' +
+                            '<div class="form-group">' +
+                            '<label>Branch Bank:</label>' +
+                            '<input type="text" name="BranchBank" class="form-control" value="' + (data.BranchBank || '') + '">' +
+                            '</div>' +
+                            '</form>';
+
+                        layer.open({
+                            type: 1,
+                            title: '编辑提款账号信息',
+                            area: ['600px', '600px'],
+                            content: formHtml,
+                            btn: ['保存', '取消'],
+                            yes: function(index, layero) {
+                                var formData = $('#editAccountForm').serialize();
+                                $btn.prop('disabled', true);
+
+                                $.ajax({
+                                    type: 'POST',
+                                    url: '/admin/withdrawal/update_account_info/' + recordId,
+                                    headers: {
+                                        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
+                                    },
+                                    data: formData,
+                                    success: function(res) {
+                                        if (res.code == 200) {
+                                            layer.msg(res.msg || '更新成功', {icon: 1}, function() {
+                                                layer.close(index);
+                                                window.location.reload();
+                                            });
+                                        } else {
+                                            layer.msg(res.msg || '更新失败', {icon: 2});
+                                            $btn.prop('disabled', false);
+                                        }
+                                    },
+                                    error: function() {
+                                        layer.msg('请求失败,请重试', {icon: 2});
+                                        $btn.prop('disabled', false);
+                                    }
+                                });
+                            },
+                            btn2: function(index) {
+                                $btn.prop('disabled', false);
+                                layer.close(index);
+                            }
+                        });
+                    } else {
+                        layer.msg(res.msg || '获取信息失败', {icon: 2});
+                    }
+                },
+                error: function() {
+                    layer.msg('请求失败,请重试', {icon: 2});
+                }
+            });
+
+            return false;
+        });
     </script>
 @endsection

+ 2 - 0
routes/web.php

@@ -546,6 +546,8 @@ Route::group([
         $route->any('/withdrawal/compensate_notify/{RecordID}', 'Admin\WithdrawalController@compensateNotify');
         $route->any('/withdrawal/init_data/{RecordID}', 'Admin\WithdrawalController@initData');
         $route->any('/withdrawal/sync_account_info/{RecordID}', 'Admin\WithdrawalController@syncAccountInfo');
+        $route->get('/withdrawal/get_account_info/{RecordID}', 'Admin\WithdrawalController@getAccountInfo');
+        $route->post('/withdrawal/update_account_info/{RecordID}', 'Admin\WithdrawalController@updateAccountInfo');
         $route->any('/withdrawal/monitor_order_fail_call/{OrderID}', 'Admin\WithdrawalController@monitorOrderFailCall');
         $route->any('/withdrawal/draw_base_change_log', 'Admin\WithdrawalController@drawBaseChangeLog');