From eaf89ed282f85b7a604c5d79bd6b7cf957eb3ba8 Mon Sep 17 00:00:00 2001
From: lingling <1077478963@qq.com>
Date: Wed, 26 Feb 2025 10:50:22 +0800
Subject: [PATCH 1/6] =?UTF-8?q?=E6=9A=82=E5=AD=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../admin/api/v1/JobuserController.php        |  29 +++--
 .../admin/api/v1/PromotionController.php      | 117 +++++++++++++++---
 app/controller/api/UserController.php         |   5 +-
 app/dao/UserDao.php                           |   2 +-
 app/model/User.php                            |   1 +
 5 files changed, 124 insertions(+), 30 deletions(-)

diff --git a/app/controller/admin/api/v1/JobuserController.php b/app/controller/admin/api/v1/JobuserController.php
index da9784e..14f65c8 100644
--- a/app/controller/admin/api/v1/JobuserController.php
+++ b/app/controller/admin/api/v1/JobuserController.php
@@ -38,9 +38,9 @@ class JobuserController
         if (!empty($data['key'])) {
             $key = $data['key'];
             $query->where(function ($query) use ($key) {
-                $query->where('username', 'like', '%' . $key . '%')
-                    ->orWhere('invite_code', 'like', '%' . $key . '%')
-                    ->orWhere('remark', 'like', '%' . $key . '%');
+                $query->where('users.username', 'like', '%' . $key . '%')
+                    ->orWhere('users.invite_code', 'like', '%' . $key . '%')
+                    ->orWhere('users.remark', 'like', '%' . $key . '%');
             });
         }
 
@@ -52,13 +52,24 @@ class JobuserController
         }
 
         // 使用 join 进行关联查询 f_id 对应的用户名称
-        $users = $query->leftJoin('users as u', 'users.f_id', '=', 'u.id')  // 假设 users 表有 id 字段,f_id 关联到父用户
-            ->select('users.*', 'u.username as parent_username')  // 选择用户表的字段和关联表的 username 字段
-            ->orderBy('id', 'desc')
-            ->get();  // 或者使用 paginate() 来进行分页
+        $users = $query->leftJoin('users as u', 'users.f_id', '=', 'u.id') // 假设 users 表有 id 字段,f_id 关联到父用户
+            ->select(
+                'users.id',
+                'users.username',
+                'users.updated_at',
+                'users.invite_code',
+                'users.login_time',
+                'users.money',
+                'users.remark',
+                'users.status',
+                'users.vip_id',
+                'u.username as parent_username' // 选择所需字段,并为父用户用户名起别名
+            )->where('users.isrobot',0)
+            ->orderBy('users.id', 'desc')->get();  // 确保按 users 表的 id 排序
 
-        // 格式化结果为数组
-        return ApiResponse::success(200, $users->toArray());
+
+        // 返回分页结果
+        return ApiResponse::success(200, $users);
     }
 
     /**
diff --git a/app/controller/admin/api/v1/PromotionController.php b/app/controller/admin/api/v1/PromotionController.php
index 18d2449..884d885 100644
--- a/app/controller/admin/api/v1/PromotionController.php
+++ b/app/controller/admin/api/v1/PromotionController.php
@@ -14,31 +14,112 @@ use app\model\UserPhoneLog;
 use hg\apidoc\annotation as Apidoc;
 use app\model\Withdraw;
 use App\Utils\Random;
+
 /**
  * @Apidoc\Title("admin推广链接控制器")
  * @Apidoc\Group("admin")
  */
 class PromotionController
-{    
+{
     /**
-    * @Apidoc\Title("管理员生成推广链接")
-    * @Apidoc\Url("admin/api/v1/Promotion/Generatelink")
-    * @Apidoc\Method("POST")
-    */
-    public function Generatelink(Request $request){
-        $invite_code=Random::str_random(7);
-        $Recommend =new Recommend();
-        $Recommend->invite_code=$invite_code;
-        $Recommend->save();
+     * @Apidoc\Title("管理员生成推广链接")
+     * @Apidoc\Url("admin/api/v1/Promotion/Generatelink")
+     * @Apidoc\Method("POST")
+     */
+    public function Generatelink(Request $request)
+    {
+        $invite_code = UserDao::Createuser();
         return ApiResponse::success(200, $invite_code);
     }
     /**
-    * @Apidoc\Title("获取推广列表所有")
-    * @Apidoc\Url("admin/api/v1/Promotion/list")
-    * @Apidoc\Method("POST")
-    */
-    public function list(Request $request){
-        $Recommend =Recommend::all();
-        return ApiResponse::success(200, $Recommend);
+     * @Apidoc\Title("获取推广列表所有")
+     * @Apidoc\Url("admin/api/v1/Promotion/list")
+     * @Apidoc\Method("POST")
+     */
+    public function list(Request $request)
+    {
+        // 获取请求的参数
+        $data = $request->post();
+
+        // 构建查询构造器
+        $query = User::query();
+
+        // 根据 key 进行模糊查询
+        if (!empty($data['key'])) {
+            $key = $data['key'];
+            $query->where(function ($query) use ($key) {
+                $query->where('users.invite_code', 'like', '%' . $key . '%')
+                    ->orWhere('users.remark', 'like', '%' . $key . '%');
+            });
+        }
+
+        // 根据 status 过滤,假设 status 字段存在并且不是 -1
+        if (isset($data['status']) && $data['status'] != -1) {
+            $status = (int)$data['status']; // 强制转换为整数
+            // 使用 users 表的别名明确指定 status 字段
+            $query->where('users.status', $status);
+        }
+
+        // 使用 join 进行关联查询 f_id 对应的用户名称
+        $users = $query->leftJoin('users as u', 'users.f_id', '=', 'u.id') // 假设 users 表有 id 字段,f_id 关联到父用户
+            ->select(
+                'users.id',
+                'users.username',
+                'users.updated_at',
+                'users.invite_code',
+                'users.login_time',
+                'users.money',
+                'users.remark',
+                'users.status',
+                'users.vip_id',
+                'u.username as parent_username' // 选择所需字段,并为父用户用户名起别名
+            )->where('users.isrobot', 1)
+            ->orderBy('users.id', 'desc')->get();  // 确保按 users 表的 id 排序
+        return ApiResponse::success(200, $users);
     }
-}
\ No newline at end of file
+
+    /**
+     * @Apidoc\Title(" 获取推广链接详细注册名单")
+     * @Apidoc\Url("admin/api/v1/Promotion/detailed")
+     * @Apidoc\Param("invite_code", type="string", require=true, desc="机器人的邀请码")
+     * @Apidoc\Param("start_date", type="string", require=false, desc="开始时间,格式:YYYY-MM-DD")
+     * @Apidoc\Param("end_date", type="string", require=false, desc="结束时间,格式:YYYY-MM-DD")
+     * @Apidoc\Method("POST")
+     */
+    public function detailed(Request $request)
+    {
+        $data = $request->post();
+
+        // 获取机器人邀请码对应的用户 ID
+        $users = User::where('robot_invite_code', $data['invite_code'])->pluck('id')->toArray();
+
+        // 获取时间段参数,默认使用今天
+        $startDate = isset($data['start_date']) ? $data['start_date'] : date('Y-m-d');
+        $endDate = isset($data['end_date']) ? $data['end_date'] : date('Y-m-d');
+
+        // 获取用户手机号(按 user_id 分组)并根据时间范围筛选
+        $UserPhone = UserPhone::whereIn('user_id', $users)
+            ->whereBetween('created_at', [$startDate . ' 00:00:00', $endDate . ' 23:59:59'])  // 时间范围筛选
+            ->groupBy('user_id')
+            ->get();
+
+        // 获取注册的用户数量
+        $res['register'] = count($users);
+
+        // 获取绑定手机号的用户数量
+        $res['binding'] = count($UserPhone);
+
+        // 获取注册的用户详细信息(筛选注册时间段)
+        $res['register_user'] = User::whereIn('id', $users)
+            ->whereBetween('created_at', [$startDate . ' 00:00:00', $endDate . ' 23:59:59'])  // 时间范围筛选
+            ->get();
+
+        // 获取绑定手机号的用户详细信息
+        $userIdsWithPhones = $UserPhone->pluck('user_id')->toArray();  // 获取绑定手机号的用户 ID 列表
+        $res['binding_user'] = User::whereIn('id', $userIdsWithPhones)
+            ->whereBetween('created_at', [$startDate . ' 00:00:00', $endDate . ' 23:59:59'])  // 时间范围筛选
+            ->get();
+
+        return ApiResponse::success(200, $res);
+    }
+}
diff --git a/app/controller/api/UserController.php b/app/controller/api/UserController.php
index dfd027b..d71681d 100644
--- a/app/controller/api/UserController.php
+++ b/app/controller/api/UserController.php
@@ -91,10 +91,12 @@ class UserController
         $f_id = 0;
         $ff_id = 0;
         $length = strlen($invitation);
+        $user = new User();
         if (!empty($invitation)) {
             if ($length == 7) {
                 $Recommend = Recommend::where('invite_code', $invitation)->first();
                 if (!empty($Recommend)) {
+                    $user->robot_invite_code = $invitation;
                     $Recommend->register += 1;
                     $Recommend->save();
                 }
@@ -110,7 +112,7 @@ class UserController
                 $f->vip_id += 1;
             }
         }
-        $user = new User();
+        
         $col = ['username'];
         foreach ($col as $v) {
             $user->$v = $request->post($v);
@@ -122,7 +124,6 @@ class UserController
         $user->password = password_hash($password, PASSWORD_DEFAULT);
         $user->save();
         $user_new = User::where('username', $username)->first();
-        var_dump($user_new);
         UserRewardDao::Register_for_free($user_new->id);
         return ApiResponseApp::success([], '注册成功');
     }
diff --git a/app/dao/UserDao.php b/app/dao/UserDao.php
index 3a502af..97c4d81 100644
--- a/app/dao/UserDao.php
+++ b/app/dao/UserDao.php
@@ -159,7 +159,7 @@ class UserDao
      * 返回邀请码
      */
     public static function Createuser(){
-        $invite_code=Random::str_random(5);
+        $invite_code=Random::str_random(7);
         $user=new User();
         $user->join_ip = '127.0.0.1';
         $user->f_id = 0;
diff --git a/app/model/User.php b/app/model/User.php
index dba316b..aeae304 100644
--- a/app/model/User.php
+++ b/app/model/User.php
@@ -33,6 +33,7 @@ use support\Model;
  * @property integer $created_at 创建时间
  * @property integer $updatetime 更新时间
  * @property integer $isrobot 是否是 管理员为了生成推广链接创建的机器人好做统计 0不是 1是机器人
+ * @property string $robot_invite_code 机器人邀请码 为了统计推广邀请人数
  */
 class User extends Model
 {

From 6ca8ddb684c9abbb397c4b885a319f61a26d6ecc Mon Sep 17 00:00:00 2001
From: lingling <1077478963@qq.com>
Date: Wed, 26 Feb 2025 18:29:18 +0800
Subject: [PATCH 2/6] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=87=AA=E5=8A=A8?=
 =?UTF-8?q?=E5=88=A0=E9=99=A4=E4=B8=89=E5=88=86=E9=92=9F=E5=89=8D=E7=9A=84?=
 =?UTF-8?q?getcode=E6=95=B0=E6=8D=AE=E4=BF=AE=E5=A4=8D=E7=AE=A1=E7=90=86?=
 =?UTF-8?q?=E5=91=98=E9=A1=B5=E9=9D=A2=20=E6=B3=A8=E5=86=8C=E6=97=B6?=
 =?UTF-8?q?=E9=97=B4=E4=B8=8D=E6=98=BE=E7=A4=BA=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../admin/api/v1/JobuserController.php        |  1 +
 config/process.php                            |  2 ++
 process/Task.php                              |  2 +-
 process/Task5.php                             | 23 +++++++++++++++++++
 4 files changed, 27 insertions(+), 1 deletion(-)
 create mode 100644 process/Task5.php

diff --git a/app/controller/admin/api/v1/JobuserController.php b/app/controller/admin/api/v1/JobuserController.php
index 14f65c8..968bfe8 100644
--- a/app/controller/admin/api/v1/JobuserController.php
+++ b/app/controller/admin/api/v1/JobuserController.php
@@ -63,6 +63,7 @@ class JobuserController
                 'users.remark',
                 'users.status',
                 'users.vip_id',
+                'users.created_at',
                 'u.username as parent_username' // 选择所需字段,并为父用户用户名起别名
             )->where('users.isrobot',0)
             ->orderBy('users.id', 'desc')->get();  // 确保按 users 表的 id 排序
diff --git a/config/process.php b/config/process.php
index 608afba..5c85b86 100644
--- a/config/process.php
+++ b/config/process.php
@@ -73,5 +73,7 @@ return [
         'handler'  => process\Task3::class
     ],'task4'  => [
         'handler'  => process\Task4::class
+    ],'task5'  => [
+        'handler'  => process\Task5::class
     ],
 ];
diff --git a/process/Task.php b/process/Task.php
index 9a55d5e..625b577 100644
--- a/process/Task.php
+++ b/process/Task.php
@@ -45,7 +45,7 @@ class Task
         // new Crontab('50 7 * * *', function(){
         //     echo date('Y-m-d H:i:s')."\n";
         // });
-        // // 每5秒执行一次
+        //  每1秒执行一次 收取验证码
         new Crontab('*/1 * * * * *', function () {
             $GetLodeLog = GetLodeLog::where('status', 0)->get();
             foreach ($GetLodeLog as $key => $value) {
diff --git a/process/Task5.php b/process/Task5.php
new file mode 100644
index 0000000..59adf24
--- /dev/null
+++ b/process/Task5.php
@@ -0,0 +1,23 @@
+<?php
+
+namespace process;
+
+use App\Utils\API\SendCode;
+use app\model\UserPhone;
+use app\dao\UserRewardDao;
+use Workerman\Crontab\Crontab;
+use app\model\GetLodeLog;
+
+/**
+ * 定时删除获取验证码暂存表
+ */
+class Task5
+{
+    public function onWorkerStart()
+    {
+        //  每1秒执行一次 收取验证码
+        new Crontab('*/1 * * * * *', function () {
+            $GetLodeLog = GetLodeLog::where('created_at', '<=', date('Y-m-d H:i:s', strtotime('-3 minutes')))->delete();
+        });
+    }
+}

From 5ee8f588073eb833294d71208ce3968282535b8a Mon Sep 17 00:00:00 2001
From: lingling <1077478963@qq.com>
Date: Wed, 26 Feb 2025 19:43:05 +0800
Subject: [PATCH 3/6] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=8E=A8=E5=B9=BF?=
 =?UTF-8?q?=E8=AF=A6=E7=BB=86=E6=9F=A5=E8=AF=A2?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 app/controller/admin/api/v1/PromotionController.php | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/app/controller/admin/api/v1/PromotionController.php b/app/controller/admin/api/v1/PromotionController.php
index 884d885..c07d61b 100644
--- a/app/controller/admin/api/v1/PromotionController.php
+++ b/app/controller/admin/api/v1/PromotionController.php
@@ -14,6 +14,7 @@ use app\model\UserPhoneLog;
 use hg\apidoc\annotation as Apidoc;
 use app\model\Withdraw;
 use App\Utils\Random;
+use support\Db;
 
 /**
  * @Apidoc\Title("admin推广链接控制器")
@@ -72,6 +73,7 @@ class PromotionController
                 'users.remark',
                 'users.status',
                 'users.vip_id',
+                'users.created_at',
                 'u.username as parent_username' // 选择所需字段,并为父用户用户名起别名
             )->where('users.isrobot', 1)
             ->orderBy('users.id', 'desc')->get();  // 确保按 users 表的 id 排序
@@ -100,11 +102,14 @@ class PromotionController
         // 获取用户手机号(按 user_id 分组)并根据时间范围筛选
         $UserPhone = UserPhone::whereIn('user_id', $users)
             ->whereBetween('created_at', [$startDate . ' 00:00:00', $endDate . ' 23:59:59'])  // 时间范围筛选
+            ->select('user_id', DB::raw('count(*) as phone_count'))  // 聚合查询,按 user_id 分组,计算每个 user_id 的手机数量
             ->groupBy('user_id')
             ->get();
 
-        // 获取注册的用户数量
-        $res['register'] = count($users);
+        // 获取注册的用户数量,按时间筛选
+        $res['register'] = User::whereIn('id', $users)
+            ->whereBetween('created_at', [$startDate . ' 00:00:00', $endDate . ' 23:59:59'])  // 时间范围筛选
+            ->count();
 
         // 获取绑定手机号的用户数量
         $res['binding'] = count($UserPhone);

From ba4b085462864d4ccdbb7cbbb50a954c04d32d96 Mon Sep 17 00:00:00 2001
From: lingling <1077478963@qq.com>
Date: Wed, 26 Feb 2025 21:48:37 +0800
Subject: [PATCH 4/6] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=90=8E=E7=AB=AF?=
 =?UTF-8?q?=E5=A4=9A=E8=AF=AD=E8=A8=80=20=E4=BF=AE=E5=A4=8D=E5=89=8D?=
 =?UTF-8?q?=E7=AB=AF=E8=AF=AD=E8=A8=80=E9=94=99=E8=AF=AF?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 app/Utils/ApiResponseApp.php             |  4 +-
 app/middleware/Lang.php                  | 32 ++++++++++++++++
 composer.json                            |  3 +-
 composer.lock                            | 48 ++++++++++++------------
 config/middleware.php                    |  1 +
 public/js/index-476be0bb.js              |  6 ++-
 resource/translations/en/messages.php    | 21 +++++++++++
 resource/translations/zh_CN/messages.php | 21 +++++++++++
 8 files changed, 107 insertions(+), 29 deletions(-)
 create mode 100644 app/middleware/Lang.php
 create mode 100644 resource/translations/en/messages.php
 create mode 100644 resource/translations/zh_CN/messages.php

diff --git a/app/Utils/ApiResponseApp.php b/app/Utils/ApiResponseApp.php
index 7463b7e..c843882 100644
--- a/app/Utils/ApiResponseApp.php
+++ b/app/Utils/ApiResponseApp.php
@@ -13,7 +13,7 @@ class ApiResponseApp
         return json([
             'code' => $code,
             'data' => $data,
-            'msg' => $message,
+            'msg' => trans($message),
             'time' => time()
         ]);
     }
@@ -23,7 +23,7 @@ class ApiResponseApp
         $code = 0;
         return json([
             'code' => $code,
-            'msg' => $message,
+            'msg' => trans($message),
             'data' => $data,
             'time' => time()
         ]);
diff --git a/app/middleware/Lang.php b/app/middleware/Lang.php
new file mode 100644
index 0000000..55fda68
--- /dev/null
+++ b/app/middleware/Lang.php
@@ -0,0 +1,32 @@
+<?php
+namespace app\middleware;
+
+use Webman\MiddlewareInterface;
+use Webman\Http\Response;
+use Webman\Http\Request;
+
+class Lang implements MiddlewareInterface
+{
+    public function process(Request $request, callable $handler) : Response
+    {
+        // 获取请求头中的 Accept-Language
+        $acceptLanguage = $request->header('Accept-Language', 'zhcn'); // 默认值是 'zh_CN'
+
+        // 将 Accept-Language 中的语言与系统支持的语言进行匹配
+        // 这里假设我们支持 'zh_CN' 和 'en_US',你可以根据实际需求扩展更多语言
+        $lang = 'zh_CN'; // 默认语言
+
+        // 提取 Accept-Language 中的语言部分,如 'zh_CN' 或 'en_US'
+        if (strpos($acceptLanguage, 'zh') === 0) {
+            $lang = 'zhcn';
+        } elseif (strpos($acceptLanguage, 'en') === 0) {
+            $lang = 'en';
+        }
+
+        // 设置语言,假设你有一个 locale 函数来处理语言设置
+        locale(session('lang', $lang));
+
+        // 返回请求处理
+        return $handler($request);
+    }
+}
diff --git a/composer.json b/composer.json
index 8d99209..50b0f1a 100644
--- a/composer.json
+++ b/composer.json
@@ -36,7 +36,8 @@
     "hhink/webman-sms": "^1.0",
     "simplehtmldom/simplehtmldom": "^2.0@RC",
     "guzzlehttp/guzzle": "^7.9",
-    "workerman/crontab": "^1.0"
+    "workerman/crontab": "^1.0",
+    "symfony/translation": "^6.0"
   },
   "suggest": {
     "ext-event": "For better performance. "
diff --git a/composer.lock b/composer.lock
index 9737881..3e1c710 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "abda64e112867835ad0472d5a7b86c66",
+    "content-hash": "6e60ac96c1f817e5e663943291142785",
     "packages": [
         {
             "name": "cakephp/core",
@@ -4211,16 +4211,16 @@
         },
         {
             "name": "symfony/translation",
-            "version": "v5.4.45",
+            "version": "v6.0.19",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/translation.git",
-                "reference": "98f26acc99341ca4bab345fb14d7b1d7cb825bed"
+                "reference": "9c24b3fdbbe9fb2ef3a6afd8bbaadfd72dad681f"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/translation/zipball/98f26acc99341ca4bab345fb14d7b1d7cb825bed",
-                "reference": "98f26acc99341ca4bab345fb14d7b1d7cb825bed",
+                "url": "https://api.github.com/repos/symfony/translation/zipball/9c24b3fdbbe9fb2ef3a6afd8bbaadfd72dad681f",
+                "reference": "9c24b3fdbbe9fb2ef3a6afd8bbaadfd72dad681f",
                 "shasum": "",
                 "mirrors": [
                     {
@@ -4230,35 +4230,33 @@
                 ]
             },
             "require": {
-                "php": ">=7.2.5",
-                "symfony/deprecation-contracts": "^2.1|^3",
+                "php": ">=8.0.2",
                 "symfony/polyfill-mbstring": "~1.0",
-                "symfony/polyfill-php80": "^1.16",
-                "symfony/translation-contracts": "^2.3"
+                "symfony/translation-contracts": "^2.3|^3.0"
             },
             "conflict": {
-                "symfony/config": "<4.4",
-                "symfony/console": "<5.3",
-                "symfony/dependency-injection": "<5.0",
-                "symfony/http-kernel": "<5.0",
-                "symfony/twig-bundle": "<5.0",
-                "symfony/yaml": "<4.4"
+                "symfony/config": "<5.4",
+                "symfony/console": "<5.4",
+                "symfony/dependency-injection": "<5.4",
+                "symfony/http-kernel": "<5.4",
+                "symfony/twig-bundle": "<5.4",
+                "symfony/yaml": "<5.4"
             },
             "provide": {
-                "symfony/translation-implementation": "2.3"
+                "symfony/translation-implementation": "2.3|3.0"
             },
             "require-dev": {
                 "psr/log": "^1|^2|^3",
-                "symfony/config": "^4.4|^5.0|^6.0",
+                "symfony/config": "^5.4|^6.0",
                 "symfony/console": "^5.4|^6.0",
-                "symfony/dependency-injection": "^5.0|^6.0",
-                "symfony/finder": "^4.4|^5.0|^6.0",
+                "symfony/dependency-injection": "^5.4|^6.0",
+                "symfony/finder": "^5.4|^6.0",
                 "symfony/http-client-contracts": "^1.1|^2.0|^3.0",
-                "symfony/http-kernel": "^5.0|^6.0",
-                "symfony/intl": "^4.4|^5.0|^6.0",
+                "symfony/http-kernel": "^5.4|^6.0",
+                "symfony/intl": "^5.4|^6.0",
                 "symfony/polyfill-intl-icu": "^1.21",
                 "symfony/service-contracts": "^1.1.2|^2|^3",
-                "symfony/yaml": "^4.4|^5.0|^6.0"
+                "symfony/yaml": "^5.4|^6.0"
             },
             "suggest": {
                 "psr/log-implementation": "To use logging capability in translator",
@@ -4294,7 +4292,7 @@
             "description": "Provides tools to internationalize your application",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/translation/tree/v5.4.45"
+                "source": "https://github.com/symfony/translation/tree/v6.0.19"
             },
             "funding": [
                 {
@@ -4310,7 +4308,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-09-25T14:11:13+00:00"
+            "time": "2023-01-01T08:36:10+00:00"
         },
         {
             "name": "symfony/translation-contracts",
@@ -5074,6 +5072,6 @@
     "platform": {
         "php": ">=7.2"
     },
-    "platform-dev": {},
+    "platform-dev": [],
     "plugin-api-version": "2.6.0"
 }
diff --git a/config/middleware.php b/config/middleware.php
index f37c51e..e92e611 100644
--- a/config/middleware.php
+++ b/config/middleware.php
@@ -17,5 +17,6 @@ return [
         // ... 这里省略其它中间件
         app\middleware\CorsMiddleware::class,
         app\middleware\JwtAuthMiddleware::class,
+        app\middleware\Lang::class,
     ]
 ];
\ No newline at end of file
diff --git a/public/js/index-476be0bb.js b/public/js/index-476be0bb.js
index c8551ab..bf2e154 100644
--- a/public/js/index-476be0bb.js
+++ b/public/js/index-476be0bb.js
@@ -15102,6 +15102,8 @@ const Vf = {
     非必填: "Not required",
     余额不足: "Insufficient balance",
     请添加印度: "Please add Bangladesh",
+    请添加孟加拉国:"Please add Bangladesh",
+    孟加拉国:"Bangladesh",
     提款需要300积分: "300 points required for withdrawal",
     提款需要1000积分: "1000 points required for withdrawal",
     提款需要500积分: "500 points required for withdrawal",
@@ -15453,7 +15455,9 @@ const Vf = {
     积分: "积分",
     非必填: "非必填",
     余额不足: "余额不足",
-    请添加印度: "请添加孟加拉国",
+    请添加印度: "请添加印度",
+    请添加孟加拉国:"请添加孟加拉国",
+    孟加拉国:"孟加拉国",
     提款需要300积分: "提款需要300积分",
     提款需要1000积分: "提款需要1000积分",
     提款需要500积分: "提款需要500积分",
diff --git a/resource/translations/en/messages.php b/resource/translations/en/messages.php
new file mode 100644
index 0000000..21db05f
--- /dev/null
+++ b/resource/translations/en/messages.php
@@ -0,0 +1,21 @@
+<?php
+
+return [
+    '挂机时长没有超过6小时,暂不能签到' => 'You have not been idle for more than 6 hours, cannot sign in yet.',
+    '您已登陆' => 'You are already logged in.',
+    '请发送验证码' => 'Please send the verification code.',
+    '账户余额不足' => 'Insufficient account balance.',
+    '需要完成Whatsapp任务' => 'You need to complete the Whatsapp task.',
+    '账号或密码错误' => 'Incorrect username or password.',
+    '账号被禁用' => 'The account is disabled.',
+    '登录成功' => 'Login successful.',
+    '账号已存在' => 'Account already exists.',
+    '代理不存在' => 'Agent does not exist.',
+    '注册成功' => 'Registration successful.',
+    '原密码错误' => 'Incorrect original password.',
+    '修改成功' => 'Modification successful.',
+    '领取成功' => 'Claim successful.',
+    '每天只能提现三次' => 'You can only withdraw three times a day.',
+    '等待管理员审核' => 'Waiting for administrator review.',
+    '转账成功' => 'Transfer successful.',
+];
diff --git a/resource/translations/zh_CN/messages.php b/resource/translations/zh_CN/messages.php
new file mode 100644
index 0000000..6ae1a97
--- /dev/null
+++ b/resource/translations/zh_CN/messages.php
@@ -0,0 +1,21 @@
+<?php
+
+return [
+    '挂机时长没有超过6小时,暂不能签到' => '挂机时长没有超过6小时,暂不能签到',
+    '您已登陆' => '您已登陆',
+    '请发送验证码' => '请发送验证码',
+    '账户余额不足' => '账户余额不足',
+    '需要完成Whatsapp任务' => '需要完成Whatsapp任务',
+    '账号或密码错误' => '账号或密码错误',
+    '账号被禁用' => '账号被禁用',
+    '登录成功' => '登录成功',
+    '账号已存在' => '账号已存在',
+    '代理不存在' => '代理不存在',
+    '注册成功' => '注册成功',
+    '原密码错误' => '原密码错误',
+    '修改成功' => '修改成功',
+    '领取成功' => '领取成功',
+    '每天只能提现三次' => '每天只能提现三次',
+    '等待管理员审核' => '等待管理员审核',
+    '转账成功' => '转账成功',
+];
\ No newline at end of file

From e68d736d92bee498d00e0172c8febac584ca5fb1 Mon Sep 17 00:00:00 2001
From: lingling <1077478963@qq.com>
Date: Wed, 26 Feb 2025 22:06:40 +0800
Subject: [PATCH 5/6] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=8A=BD=E5=A5=96?=
 =?UTF-8?q?=E9=85=8D=E7=BD=AE=E4=B8=A2=E5=A4=B1?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 app/model/Reward.php | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)
 create mode 100644 app/model/Reward.php

diff --git a/app/model/Reward.php b/app/model/Reward.php
new file mode 100644
index 0000000..4b8e3fe
--- /dev/null
+++ b/app/model/Reward.php
@@ -0,0 +1,25 @@
+<?php
+
+namespace app\model;
+
+use support\Model;
+
+class Reward extends Model
+{
+    /**
+     * The table associated with the model.
+     *
+     * @var string
+     */
+    protected $table = 'rewards';
+
+    /**
+     * The primary key associated with the table.
+     *
+     * @var string
+     */
+    protected $primaryKey = 'id';
+
+    
+    public $timestamps = false;
+}

From 6737887dab700fd241b3f76f584928d4ae0862a8 Mon Sep 17 00:00:00 2001
From: lingling <1077478963@qq.com>
Date: Wed, 26 Feb 2025 22:07:54 +0800
Subject: [PATCH 6/6] =?UTF-8?q?=E6=A0=B9=E6=8D=AE=E9=9C=80=E6=B1=82?=
 =?UTF-8?q?=E5=88=A0=E9=99=A4=E8=A7=86=E9=A2=91=E6=96=87=E4=BB=B6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../{name-9e85ff4d.mp4 => name-9e85ff4d.mp4.back}   | Bin
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename public/mp4/{name-9e85ff4d.mp4 => name-9e85ff4d.mp4.back} (100%)

diff --git a/public/mp4/name-9e85ff4d.mp4 b/public/mp4/name-9e85ff4d.mp4.back
similarity index 100%
rename from public/mp4/name-9e85ff4d.mp4
rename to public/mp4/name-9e85ff4d.mp4.back