Ken 2 周之前
父节点
当前提交
58fb99cadb
共有 3 个文件被更改,包括 53 次插入14 次删除
  1. 39 0
      app/Http/Controllers/admin/User.php
  2. 4 4
      app/Services/SecretService.php
  3. 10 10
      public/doc/index.html

+ 39 - 0
app/Http/Controllers/admin/User.php

@@ -5,7 +5,9 @@ namespace App\Http\Controllers\admin;
 use App\Constants\HttpStatus;
 use App\Http\Controllers\Controller;
 use App\Services\RoomService;
+use App\Services\SecretService;
 use Illuminate\Support\Facades\Auth;
+use Illuminate\Support\Facades\DB;
 use Illuminate\Support\Facades\Validator;
 use App\Services\UserService;
 use Exception;
@@ -13,6 +15,7 @@ use Illuminate\Http\Request;
 use Illuminate\Validation\ValidationException;
 use App\Services\AddressService;
 
+use Illuminate\Http\JsonResponse;
 
 class User extends Controller
 {
@@ -95,6 +98,42 @@ class User extends Controller
 
     }
 
+    /**
+     *
+     * @api {post} /admin/user/merge 账户合并
+     * @apiGroup 会员管理
+     * @apiDescription 合并后,余额,银行卡,USDT地址 将合并到新用户,请谨慎操作
+     *
+     * @apiUse result
+     * @apiUse header
+     * @apiVersion 1.0.0
+     *
+     * @apiParam {string} member_id 接收者的member_id
+     * @apiParam {string} secret_key 被合并的用户的秘钥
+     */
+    public function merge(): JsonResponse
+    {
+        DB::beginTransaction();
+        try {
+            $params = request()->validate([
+                'member_id' => ['required', 'string', 'min:1'],
+                'secret_key' => ['required', 'string', 'min:1'],
+            ]);
+            $res = SecretService::migration($params['member_id'], $params['secret_key']);
+            if (!$res) {
+                throw new Exception("迁移失败", HttpStatus::CUSTOM_ERROR);
+            }
+            DB::commit();
+        } catch (ValidationException $e) {
+            DB::rollBack();
+            return $this->error(HttpStatus::CUSTOM_ERROR, $e->validator->errors()->first());
+        } catch (Exception $e) {
+            DB::rollBack();
+            return $this->error(intval($e->getCode()));
+        }
+        return $this->success(msg: '已完成迁移');
+    }
+
     // 提现地址
     public function address()
     {

+ 4 - 4
app/Services/SecretService.php

@@ -118,11 +118,11 @@ class SecretService
 
 
     /**
-     * @param $chatId
-     * @param $secretKey
+     * @param string $chatId 接收者的member_id
+     * @param string $secretKey 被接收者的 秘钥
      * @return bool
      */
-    public static function migration($chatId, $secretKey): bool
+    public static function migration(string $chatId, string $secretKey): bool
     {
         $user = User::where(['secret_key' => $secretKey])->where('member_id', '!=', $chatId)->first();
         $newUser = User::where('member_id', $chatId)->first();
@@ -170,7 +170,7 @@ class SecretService
 //        $user = User::where(['secret_key' => $secret])->where('member_id', '!=', $chatId)->first();
 //        $wallet = Wallet::where('member_id', $user->getMemberId())->first();
 
-        $res = static::migration($chatId, $secret);
+        $res = SecretService::migration($chatId, $secret);
         if ($res) {
             return [
                 'chat_id' => $chatId,

+ 10 - 10
public/doc/index.html

@@ -10,15 +10,15 @@
     <meta name="description" content="Bot">
     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-    <link href="assets/bootstrap.min.css?v=1762738482337" rel="stylesheet" media="screen">
-    <link href="assets/prism.css?v=1762738482337" rel="stylesheet"/>
-    <link href="assets/prism-toolbar.css?v=1762738482337" rel="stylesheet"/>
-    <link href="assets/prism-diff-highlight.css?v=1762738482337" rel="stylesheet"/>
-    <link href="assets/main.css?v=1762738482337" rel="stylesheet" media="screen, print">
-    <link href="assets/favicon.ico?v=1762738482337" rel="icon" type="image/x-icon">
-    <link href="assets/apple-touch-icon.png?v=1762738482337" rel="apple-touch-icon" sizes="180x180">
-    <link href="assets/favicon-32x32.png?v=1762738482337" rel="icon" type="image/png" sizes="32x32">
-    <link href="assets/favicon-16x16.png?v=1762738482337" rel="icon" type="image/png" sizes="16x16">
+    <link href="assets/bootstrap.min.css?v=1764037080838" rel="stylesheet" media="screen">
+    <link href="assets/prism.css?v=1764037080838" rel="stylesheet"/>
+    <link href="assets/prism-toolbar.css?v=1764037080838" rel="stylesheet"/>
+    <link href="assets/prism-diff-highlight.css?v=1764037080838" rel="stylesheet"/>
+    <link href="assets/main.css?v=1764037080838" rel="stylesheet" media="screen, print">
+    <link href="assets/favicon.ico?v=1764037080838" rel="icon" type="image/x-icon">
+    <link href="assets/apple-touch-icon.png?v=1764037080838" rel="apple-touch-icon" sizes="180x180">
+    <link href="assets/favicon-32x32.png?v=1764037080838" rel="icon" type="image/png" sizes="32x32">
+    <link href="assets/favicon-16x16.png?v=1764037080838" rel="icon" type="image/png" sizes="16x16">
     <style>
         body {
             font-family: Arial, sans-serif;
@@ -1600,7 +1600,7 @@
 </div>
 
 
-<script src="assets/main.bundle.js?v=1762738482337"></script>
+<script src="assets/main.bundle.js?v=1764037080838"></script>
 <!--suppress JSJQueryEfficiency, JSStringConcatenationToES6Template, JSStringConcatenationToES6Template, JSStringConcatenationToES6Template -->
 <script>