Browse Source

refactor: reg reward

M1Screw 1 year ago
parent
commit
3bd29720b8

+ 3 - 5
app/routes.php

@@ -213,11 +213,9 @@ return static function (Slim\App $app): void {
         // 订阅日志
         $group->get('/subscribe', App\Controllers\Admin\SubLogController::class . ':index');
         $group->post('/subscribe/ajax', App\Controllers\Admin\SubLogController::class . ':ajax');
-        // 邀请日志
-        $group->get('/invite', App\Controllers\Admin\InviteController::class . ':index');
-        $group->post('/invite/update_invite', App\Controllers\Admin\InviteController::class . ':update');
-        $group->post('/invite/add_invite', App\Controllers\Admin\InviteController::class . ':add');
-        $group->post('/invite/ajax', App\Controllers\Admin\InviteController::class . ':ajax');
+        // 返利日志
+        $group->get('/payback', App\Controllers\Admin\PaybackController::class . ':index');
+        $group->post('/payback/ajax', App\Controllers\Admin\PaybackController::class . ':ajax');
         // 流量日志
         $group->get('/traffic', App\Controllers\Admin\TrafficLogController::class . ':index');
         $group->post('/traffic/ajax', App\Controllers\Admin\TrafficLogController::class . ':ajax');

+ 6 - 6
config/settings.json

@@ -1271,22 +1271,22 @@
     },
     {
         "id": null,
-        "item": "invitation_to_register_balance_reward",
-        "value": "1",
+        "item": "invite_reg_money_reward",
+        "value": "0",
         "class": "ref",
         "is_public": 1,
         "type": "int",
-        "default": "1",
+        "default": "0",
         "mark": "邀请注册余额奖励(元)"
     },
     {
         "id": null,
-        "item": "invitation_to_register_traffic_reward",
-        "value": "10",
+        "item": "invite_reg_traffic_reward",
+        "value": "0",
         "class": "ref",
         "is_public": 1,
         "type": "int",
-        "default": "10",
+        "default": "0",
         "mark": "邀请注册流量奖励(GB)"
     },
     {

+ 1 - 1
resources/views/tabler/admin/announcement/create.tpl

@@ -1,6 +1,6 @@
 {include file='admin/header.tpl'}
 
-<script src="//cdnjs.cloudflare.com/ajax/libs/tinymce/6.8.0/tinymce.min.js"></script>
+<script src="//cdnjs.cloudflare.com/ajax/libs/tinymce/6.8.2/tinymce.min.js"></script>
 
 <div class="page-wrapper">
     <div class="container-xl">

+ 1 - 1
resources/views/tabler/admin/announcement/edit.tpl

@@ -1,6 +1,6 @@
 {include file='admin/header.tpl'}
 
-<script src="//cdnjs.cloudflare.com/ajax/libs/tinymce/6.8.0/tinymce.min.js"></script>
+<script src="//cdnjs.cloudflare.com/ajax/libs/tinymce/6.8.2/tinymce.min.js"></script>
 
 <div class="page-wrapper">
     <div class="container-xl">

+ 1 - 1
resources/views/tabler/admin/docs/create.tpl

@@ -1,6 +1,6 @@
 {include file='admin/header.tpl'}
 
-<script src="//cdnjs.cloudflare.com/ajax/libs/tinymce/6.8.0/tinymce.min.js"></script>
+<script src="//cdnjs.cloudflare.com/ajax/libs/tinymce/6.8.2/tinymce.min.js"></script>
 
 <div class="page-wrapper">
     <div class="container-xl">

+ 1 - 1
resources/views/tabler/admin/docs/edit.tpl

@@ -1,6 +1,6 @@
 {include file='admin/header.tpl'}
 
-<script src="//cdnjs.cloudflare.com/ajax/libs/tinymce/6.8.0/tinymce.min.js"></script>
+<script src="//cdnjs.cloudflare.com/ajax/libs/tinymce/6.8.2/tinymce.min.js"></script>
 
 <div class="page-wrapper">
     <div class="container-xl">

+ 2 - 2
resources/views/tabler/admin/header.tpl

@@ -189,9 +189,9 @@
                                     <i class="ti ti-rss"></i>&nbsp;
                                     订阅
                                 </a>
-                                <a class="dropdown-item" href="/admin/invite">
+                                <a class="dropdown-item" href="/admin/payback">
                                     <i class="ti ti-friends"></i>&nbsp;
-                                    邀请
+                                    返利
                                 </a>
                                 <a class="dropdown-item" href="/admin/money">
                                     <i class="ti ti-coin"></i>&nbsp;

+ 0 - 253
resources/views/tabler/admin/log/invite.tpl

@@ -1,253 +0,0 @@
-{include file='admin/header.tpl'}
-
-<div class="page-wrapper">
-    <div class="container-xl">
-        <div class="page-header d-print-none text-white">
-            <div class="row align-items-center">
-                <div class="col">
-                    <h2 class="page-title">
-                        <span class="home-title">返利记录</span>
-                    </h2>
-                    <div class="page-pretitle my-3">
-                        <span class="home-subtitle">查看用户的返利记录</span>
-                    </div>
-                </div>
-                <div class="col-auto">
-                    <div class="btn-list">
-                        <button href="#" class="btn btn-primary" data-bs-toggle="modal"
-                                data-bs-target="#update-invite-dialog">
-                            <i class="icon ti ti-user-edit"></i>
-                            修改邀请者
-                        </button>
-                        <button href="#" class="btn btn-primary" data-bs-toggle="modal"
-                                data-bs-target="#add-invite-dialog">
-                            <i class="icon ti ti-plus"></i>
-                            添加邀请数量
-                        </button>
-                    </div>
-                </div>
-            </div>
-        </div>
-    </div>
-    <div class="page-body">
-        <div class="container-xl">
-            <div class="row row-deck row-cards">
-                <div class="col-12">
-                    <div class="card">
-                        <div class="table-responsive">
-                            <table id="data-table" class="table card-table table-vcenter text-nowrap datatable">
-                                <thead>
-                                <tr>
-                                    {foreach $details['field'] as $key => $value}
-                                        <th>{$value}</th>
-                                    {/foreach}
-                                </tr>
-                                </thead>
-                            </table>
-                        </div>
-                    </div>
-                </div>
-            </div>
-        </div>
-    </div>
-
-    <div class="modal modal-blur fade" id="update-invite-dialog" tabindex="-1" role="dialog" aria-hidden="true">
-        <div class="modal-dialog modal-dialog-centered modal-dialog-scrollable" role="document">
-            <div class="modal-content">
-                <div class="modal-header">
-                    <h5 class="modal-title">修改邀请者</h5>
-                    <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
-                </div>
-                <div class="modal-body">
-                    {foreach $details['update_dialog'] as $from}
-                        {if $from['type'] === 'input'}
-                            <div class="form-group mb-3 row">
-                                <label class="form-label col-3 col-form-label">{$from['info']}</label>
-                                <div class="col">
-                                    <input id="{$from['id']}" type="text" class="form-control"
-                                           placeholder="{$from['placeholder']}">
-                                </div>
-                            </div>
-                        {/if}
-                        {if $from['type'] === 'textarea'}
-                            <div class="form-group mb-3 row">
-                                <label class="form-label col-3 col-form-label">{$from['info']}</label>
-                                <textarea id="{$from['id']}" class="col form-control" rows="{$from['rows']}"
-                                          placeholder="{$from['placeholder']}"></textarea>
-                            </div>
-                        {/if}
-                        {if $from['type'] === 'select'}
-                            <div class="form-group mb-3 row">
-                                <label class="form-label col-3 col-form-label">{$from['info']}</label>
-                                <div class="col">
-                                    <select id="{$from['id']}" class="col form-select">
-                                        {foreach $from['select'] as $key => $value}
-                                            <option value="{$key}">{$value}</option>
-                                        {/foreach}
-                                    </select>
-                                </div>
-                            </div>
-                        {/if}
-                    {/foreach}
-                </div>
-                <div class="modal-footer">
-                    <button type="button" class="btn me-auto" data-bs-dismiss="modal">取消</button>
-                    <button id="update-invite-button" type="button" class="btn btn-primary" data-bs-dismiss="modal">
-                        提交
-                    </button>
-                </div>
-            </div>
-        </div>
-    </div>
-
-    <div class="modal modal-blur fade" id="add-invite-dialog" tabindex="-1" role="dialog" aria-hidden="true">
-        <div class="modal-dialog modal-dialog-centered modal-dialog-scrollable" role="document">
-            <div class="modal-content">
-                <div class="modal-header">
-                    <h5 class="modal-title">添加邀请数量</h5>
-                    <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
-                </div>
-                <div class="modal-body">
-                    {foreach $details['add_dialog'] as $from}
-                        {if $from['type'] === 'input'}
-                            <div class="form-group mb-3 row">
-                                <label class="form-label col-3 col-form-label">{$from['info']}</label>
-                                <div class="col">
-                                    <input id="{$from['id']}" type="text" class="form-control"
-                                           placeholder="{$from['placeholder']}">
-                                </div>
-                            </div>
-                        {/if}
-                        {if $from['type'] === 'textarea'}
-                            <div class="form-group mb-3 row">
-                                <label class="form-label col-3 col-form-label">{$from['info']}</label>
-                                <textarea id="{$from['id']}" class="col form-control" rows="{$from['rows']}"
-                                          placeholder="{$from['placeholder']}"></textarea>
-                            </div>
-                        {/if}
-                        {if $from['type'] === 'select'}
-                            <div class="form-group mb-3 row">
-                                <label class="form-label col-3 col-form-label">{$from['info']}</label>
-                                <div class="col">
-                                    <select id="{$from['id']}" class="col form-select">
-                                        {foreach $from['select'] as $key => $value}
-                                            <option value="{$key}">{$value}</option>
-                                        {/foreach}
-                                    </select>
-                                </div>
-                            </div>
-                        {/if}
-                    {/foreach}
-                </div>
-                <div class="modal-footer">
-                    <button type="button" class="btn me-auto" data-bs-dismiss="modal">取消</button>
-                    <button id="add-invite-button" type="button" class="btn btn-primary" data-bs-dismiss="modal">提交
-                    </button>
-                </div>
-            </div>
-        </div>
-    </div>
-
-    <script>
-        let table = new DataTable('#data-table', {
-            ajax: {
-                url: '/admin/invite/ajax',
-                type: 'POST',
-                dataSrc: 'paybacks'
-            },
-            "autoWidth": false,
-            'iDisplayLength': 10,
-            'scrollX': true,
-            'order': [
-                [0, 'desc']
-            ],
-            columns: [
-                {foreach $details['field'] as $key => $value}
-                {
-                    data: '{$key}'
-                },
-                {/foreach}
-            ],
-            "dom": "<'row px-3 py-3'<'col-sm-12 col-md-6'l><'col-sm-12 col-md-6'f>>" +
-                "<'row'<'col-sm-12'tr>>" +
-                "<'row card-footer d-flex align-items-center'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>",
-            language: {
-                "sProcessing": "处理中...",
-                "sLengthMenu": "显示 _MENU_ 条",
-                "sZeroRecords": "没有匹配结果",
-                "sInfo": "第 _START_ 至 _END_ 项结果,共 _TOTAL_ 项",
-                "sInfoEmpty": "第 0 至 0 项结果,共 0 项",
-                "sInfoFiltered": "(在 _MAX_ 项中查找)",
-                "sInfoPostFix": "",
-                "sSearch": "<i class=\"ti ti-search\"></i> ",
-                "sUrl": "",
-                "sEmptyTable": "表中数据为空",
-                "sLoadingRecords": "载入中...",
-                "sInfoThousands": ",",
-                "oPaginate": {
-                    "sFirst": "首页",
-                    "sPrevious": "<i class=\"ti ti-arrow-left\"></i>",
-                    "sNext": "<i class=\"ti ti-arrow-right\"></i>",
-                    "sLast": "末页"
-                },
-                "oAria": {
-                    "sSortAscending": ": 以升序排列此列",
-                    "sSortDescending": ": 以降序排列此列"
-                }
-            }
-        });
-
-        $("#update-invite-button").click(function () {
-            $.ajax({
-                type: "POST",
-                url: "/admin/invite/update_invite",
-                dataType: "json",
-                data: {
-                    {foreach $details['update_dialog'] as $from}
-                    {$from['id']}: $('#{$from['id']}').val(),
-                    {/foreach}
-                },
-                success: function (data) {
-                    if (data.ret === 1) {
-                        $('#success-message').text(data.msg);
-                        $('#success-dialog').modal('show');
-                        reloadTableAjax();
-                    } else {
-                        $('#fail-message').text(data.msg);
-                        $('#fail-dialog').modal('show');
-                    }
-                }
-            })
-        });
-
-        $("#add-invite-button").click(function () {
-            $.ajax({
-                type: "POST",
-                url: "/admin/invite/add_invite",
-                dataType: "json",
-                data: {
-                    {foreach $details['add_dialog'] as $from}
-                    {$from['id']}: $('#{$from['id']}').val(),
-                    {/foreach}
-                },
-                success: function (data) {
-                    if (data.ret === 1) {
-                        $('#success-message').text(data.msg);
-                        $('#success-dialog').modal('show');
-                        reloadTableAjax();
-                    } else {
-                        $('#fail-message').text(data.msg);
-                        $('#fail-dialog').modal('show');
-                    }
-                }
-            })
-        });
-
-        function loadTable() {
-            table;
-        }
-
-        loadTable();
-    </script>
-
-    {include file='admin/footer.tpl'}

+ 96 - 0
resources/views/tabler/admin/log/payback.tpl

@@ -0,0 +1,96 @@
+{include file='admin/header.tpl'}
+
+<div class="page-wrapper">
+    <div class="container-xl">
+        <div class="page-header d-print-none text-white">
+            <div class="row align-items-center">
+                <div class="col">
+                    <h2 class="page-title">
+                        <span class="home-title">返利记录</span>
+                    </h2>
+                    <div class="page-pretitle my-3">
+                        <span class="home-subtitle">查看用户的返利记录</span>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+    <div class="page-body">
+        <div class="container-xl">
+            <div class="row row-deck row-cards">
+                <div class="col-12">
+                    <div class="card">
+                        <div class="table-responsive">
+                            <table id="data-table" class="table card-table table-vcenter text-nowrap datatable">
+                                <thead>
+                                <tr>
+                                    {foreach $details['field'] as $key => $value}
+                                        <th>{$value}</th>
+                                    {/foreach}
+                                </tr>
+                                </thead>
+                            </table>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+
+    <script>
+        let table = new DataTable('#data-table', {
+            ajax: {
+                url: '/admin/payback/ajax',
+                type: 'POST',
+                dataSrc: 'paybacks'
+            },
+            "autoWidth": false,
+            'iDisplayLength': 10,
+            'scrollX': true,
+            'order': [
+                [0, 'desc']
+            ],
+            columns: [
+                {foreach $details['field'] as $key => $value}
+                {
+                    data: '{$key}'
+                },
+                {/foreach}
+            ],
+            "dom": "<'row px-3 py-3'<'col-sm-12 col-md-6'l><'col-sm-12 col-md-6'f>>" +
+                "<'row'<'col-sm-12'tr>>" +
+                "<'row card-footer d-flex align-items-center'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>",
+            language: {
+                "sProcessing": "处理中...",
+                "sLengthMenu": "显示 _MENU_ 条",
+                "sZeroRecords": "没有匹配结果",
+                "sInfo": "第 _START_ 至 _END_ 项结果,共 _TOTAL_ 项",
+                "sInfoEmpty": "第 0 至 0 项结果,共 0 项",
+                "sInfoFiltered": "(在 _MAX_ 项中查找)",
+                "sInfoPostFix": "",
+                "sSearch": "<i class=\"ti ti-search\"></i> ",
+                "sUrl": "",
+                "sEmptyTable": "表中数据为空",
+                "sLoadingRecords": "载入中...",
+                "sInfoThousands": ",",
+                "oPaginate": {
+                    "sFirst": "首页",
+                    "sPrevious": "<i class=\"ti ti-arrow-left\"></i>",
+                    "sNext": "<i class=\"ti ti-arrow-right\"></i>",
+                    "sLast": "末页"
+                },
+                "oAria": {
+                    "sSortAscending": ": 以升序排列此列",
+                    "sSortDescending": ": 以降序排列此列"
+                }
+            }
+        });
+
+        function loadTable() {
+            table;
+        }
+
+        loadTable();
+    </script>
+
+    {include file='admin/footer.tpl'}

+ 4 - 4
resources/views/tabler/admin/setting/ref.tpl

@@ -45,17 +45,17 @@
                                         <div class="form-group mb-3 row">
                                             <label class="form-label col-3 col-form-label">被邀请者初始账户余额(元)</label>
                                             <div class="col">
-                                                <input id="invitation_to_register_balance_reward" type="text"
+                                                <input id="invite_reg_money_reward" type="text"
                                                        class="form-control"
-                                                       value="{$settings['invitation_to_register_balance_reward']}">
+                                                       value="{$settings['invite_reg_money_reward']}">
                                             </div>
                                         </div>
                                         <div class="form-group mb-3 row">
                                             <label class="form-label col-3 col-form-label">邀请者流量奖励(GB)</label>
                                             <div class="col">
-                                                <input id="invitation_to_register_traffic_reward" type="text"
+                                                <input id="invite_reg_traffic_reward" type="text"
                                                        class="form-control"
-                                                       value="{$settings['invitation_to_register_traffic_reward']}">
+                                                       value="{$settings['invite_reg_traffic_reward']}">
                                             </div>
                                         </div>
                                     </div>

+ 0 - 164
src/Controllers/Admin/InviteController.php

@@ -1,164 +0,0 @@
-<?php
-
-declare(strict_types=1);
-
-namespace App\Controllers\Admin;
-
-use App\Controllers\BaseController;
-use App\Models\Payback;
-use App\Models\User;
-use App\Utils\Tools;
-use Exception;
-use Psr\Http\Message\ResponseInterface;
-use Slim\Http\Response;
-use Slim\Http\ServerRequest;
-use function is_numeric;
-
-final class InviteController extends BaseController
-{
-    private static array $details =
-        [
-            'field' => [
-                'id' => '事件ID',
-                'total' => '原始金额',
-                'userid' => '发起用户ID',
-                'user_name' => '发起用户名',
-                'ref_by' => '获利用户ID',
-                'ref_user_name' => '获利用户名',
-                'ref_get' => '获利金额',
-                'invoice_id' => '账单ID',
-                'datetime' => '时间',
-            ],
-            'update_dialog' => [
-                [
-                    'id' => 'userid',
-                    'info' => '修改的用户',
-                    'type' => 'input',
-                    'placeholder' => '需要修改邀请者的用户 ID 或 Email',
-                ],
-                [
-                    'id' => 'refid',
-                    'info' => '邀请者 ID',
-                    'type' => 'input',
-                    'placeholder' => '目标邀请者的用户 ID',
-                ],
-            ],
-            'add_dialog' => [
-                [
-                    'id' => 'userid',
-                    'info' => '修改的用户',
-                    'type' => 'input',
-                    'placeholder' => '需要邀请数量的用户 ID 或 Email',
-                ],
-                [
-                    'id' => 'invite_num',
-                    'info' => '邀请数量',
-                    'type' => 'input',
-                    'placeholder' => '需要添加的邀请数量',
-                ],
-            ],
-        ];
-
-    /**
-     * 后台邀请记录页面
-     *
-     * @throws Exception
-     */
-    public function index(ServerRequest $request, Response $response, array $args): Response|ResponseInterface
-    {
-        return $response->write(
-            $this->view()
-                ->assign('details', self::$details)
-                ->fetch('admin/log/invite.tpl')
-        );
-    }
-
-    /**
-     * 更改用户邀请者
-     */
-    public function update(ServerRequest $request, Response $response, array $args): Response|ResponseInterface
-    {
-        $userid = $request->getParam('userid');
-
-        if ($userid === null) {
-            return $response->withJson([
-                'ret' => 0,
-                'msg' => '参数错误',
-            ]);
-        }
-
-        if (str_contains($userid, '@')) {
-            $user = (new User())->where('email', '=', $userid)->first();
-        } else {
-            $user = (new User())->find((int) $userid);
-        }
-
-        if ($user === null) {
-            return $response->withJson([
-                'ret' => 0,
-                'msg' => '邀请者更改失败,检查用户 ID/Email 是否输入正确',
-            ]);
-        }
-
-        $user->ref_by = $request->getParam('refid', 0);  //如未提供,则删除用户的邀请者
-        $user->save();
-
-        return $response->withJson([
-            'ret' => 1,
-            'msg' => '邀请者更改成功',
-        ]);
-    }
-
-    /**
-     * 为用户添加邀请次数
-     */
-    public function add(ServerRequest $request, Response $response, array $args): Response|ResponseInterface
-    {
-        $invite_num = (int) $request->getParam('invite_num');
-
-        if (! is_numeric($invite_num)) {
-            return $response->withJson([
-                'ret' => 0,
-                'msg' => '邀请次数错误',
-            ]);
-        }
-
-        if (str_contains($request->getParam('userid'), '@')) {
-            $user = (new User())->where('email', '=', $request->getParam('userid'))->first();
-        } else {
-            $user = (new User())->find((int) $request->getParam('userid'));
-        }
-
-        if ($user === null) {
-            return $response->withJson([
-                'ret' => 0,
-                'msg' => '邀请次数添加失败,检查用户 ID/Email 是否输入正确',
-            ]);
-        }
-
-        $user->addInviteNum($invite_num);
-
-        return $response->withJson([
-            'ret' => 1,
-            'msg' => '邀请次数添加成功',
-        ]);
-    }
-
-    /**
-     * 后台登录记录页面 AJAX
-     */
-    public function ajax(ServerRequest $request, Response $response, array $args): Response|ResponseInterface
-    {
-        $paybacks = (new Payback())->orderBy('id', 'desc')->get();
-
-        foreach ($paybacks as $payback) {
-            $payback->datetime = Tools::toDateTime((int) $payback->datetime);
-            $payback->user_name = $payback->getAttributes();
-            $payback->ref_user_name = $payback->getAttributes();
-        }
-
-        return $response->withJson([
-            'paybacks' => $paybacks,
-        ]);
-    }
-}

+ 63 - 0
src/Controllers/Admin/PaybackController.php

@@ -0,0 +1,63 @@
+<?php
+
+declare(strict_types=1);
+
+namespace App\Controllers\Admin;
+
+use App\Controllers\BaseController;
+use App\Models\Payback;
+use App\Utils\Tools;
+use Exception;
+use Psr\Http\Message\ResponseInterface;
+use Slim\Http\Response;
+use Slim\Http\ServerRequest;
+
+final class PaybackController extends BaseController
+{
+    private static array $details =
+        [
+            'field' => [
+                'id' => '事件ID',
+                'total' => '原始金额',
+                'userid' => '发起用户ID',
+                'user_name' => '发起用户名',
+                'ref_by' => '获利用户ID',
+                'ref_user_name' => '获利用户名',
+                'ref_get' => '获利金额',
+                'invoice_id' => '账单ID',
+                'datetime' => '时间',
+            ],
+        ];
+
+    /**
+     * 后台邀请记录页面
+     *
+     * @throws Exception
+     */
+    public function index(ServerRequest $request, Response $response, array $args): Response|ResponseInterface
+    {
+        return $response->write(
+            $this->view()
+                ->assign('details', self::$details)
+                ->fetch('admin/log/payback.tpl')
+        );
+    }
+
+    /**
+     * 后台登录记录页面 AJAX
+     */
+    public function ajax(ServerRequest $request, Response $response, array $args): Response|ResponseInterface
+    {
+        $paybacks = (new Payback())->orderBy('id', 'desc')->get();
+
+        foreach ($paybacks as $payback) {
+            $payback->datetime = Tools::toDateTime((int) $payback->datetime);
+            $payback->user_name = $payback->getAttributes();
+            $payback->ref_user_name = $payback->getAttributes();
+        }
+
+        return $response->withJson([
+            'paybacks' => $paybacks,
+        ]);
+    }
+}

+ 2 - 2
src/Controllers/Admin/Setting/RefController.php

@@ -11,8 +11,8 @@ use Exception;
 final class RefController extends BaseController
 {
     private static array $update_field = [
-        'invitation_to_register_balance_reward',
-        'invitation_to_register_traffic_reward',
+        'invite_reg_money_reward',
+        'invite_reg_traffic_reward',
         'invite_mode',
         'invite_reward_mode',
         'invite_reward_rate',

+ 9 - 3
src/Controllers/AuthController.php

@@ -14,6 +14,7 @@ use App\Services\Captcha;
 use App\Services\Mail;
 use App\Services\MFA;
 use App\Services\RateLimit;
+use App\Services\Reward;
 use App\Utils\Cookie;
 use App\Utils\Hash;
 use App\Utils\ResponseHelper;
@@ -259,9 +260,10 @@ final class AuthController extends BaseController
 
         if ($invite_code !== '') {
             $invite = (new InviteCode())->where('code', $invite_code)->first();
-            $invite->reward();
-            $user->ref_by = $invite->user_id;
-            $user->money = Config::obtain('invitation_to_register_balance_reward');
+
+            if ($invite !== null) {
+                $user->ref_by = $invite->user_id;
+            }
         }
 
         $user->ga_token = MFA::generateGaToken();
@@ -283,6 +285,10 @@ final class AuthController extends BaseController
         }
 
         if ($user->save() && ! $is_admin_reg) {
+            if ($user->ref_by !== 0) {
+                Reward::issueRegReward($user->id, $user->ref_by);
+            }
+
             Auth::login($user->id, 3600);
             (new LoginIp())->collectLoginIP($_SERVER['REMOTE_ADDR'], 0, $user->id);
 

+ 0 - 20
src/Models/InviteCode.php

@@ -4,7 +4,6 @@ declare(strict_types=1);
 
 namespace App\Models;
 
-use App\Utils\Tools;
 use Illuminate\Database\Query\Builder;
 
 /**
@@ -18,23 +17,4 @@ final class InviteCode extends Model
 {
     protected $connection = 'default';
     protected $table = 'user_invite_code';
-
-    public function reward(): void
-    {
-        $user = (new User())->where('id', $this->user_id)
-            ->where('is_banned', 0)
-            ->where('is_shadow_banned', 0)
-            ->first();
-
-        if ($user !== null) {
-            $user->transfer_enable += Tools::toGB(Config::obtain('invitation_to_register_traffic_reward'));
-
-            if ($user->invite_num > 0) {
-                --$user->invite_num;
-                // 避免设置为不限制邀请次数的值 -1 发生变动
-            }
-
-            $user->save();
-        }
-    }
 }

+ 4 - 4
src/Services/Bot/Telegram/Callback.php

@@ -890,11 +890,11 @@ final class Callback
         $invite = Config::getClass('ref');
 
         $text = [
-            '<strong>你每邀请 1 位用户注册:</strong>',
+            '<strong>你每邀请 <code>1</code> 位用户注册:</strong>',
             '',
-            '- 你会获得 <strong>' . $invite['invitation_to_register_traffic_reward'] . 'G</strong> 流量奖励。',
-            '- 对方将获得 <strong>' . $invite['invitation_to_register_balance_reward'] . ' 元</strong> 初始账户余额。',
-            '- 对方充值时你还会获得对方充值金额的 <strong>' . $invite['rebate_ratio'] * 100 . '%</strong> 的返利。',
+            '- 你会获得 <code>' . Config::obtain('invite_reg_money_reward') . 'G</code> 流量奖励。',
+            '- 对方将获得 <code>' . Config::obtain('invite_reg_traffic_reward') . ' 元</code> 初始账户余额。',
+            '- 对方支付账单时你会获得对方账单金额的 <code>' . Config::obtain('invite_reward_rate') * 100 . '%</code> 的返利。',
             '',
             '已获得返利:' . $paybacks_sum . ' 元。',
         ];

+ 34 - 0
src/Services/Reward.php

@@ -79,4 +79,38 @@ final class Reward
             );
         }
     }
+
+    public static function issueRegReward($user_id, $ref_user_id): void
+    {
+        $invite_reg_money_reward = Config::obtain('invite_reg_money_reward');
+        $invite_reg_traffic_reward = Config::obtain('invite_reg_traffic_reward');
+
+        $user = (new User())->where('id', $user_id)->first();
+
+        $ref_user = (new User())->where('id', $ref_user_id)
+            ->where('is_banned', 0)
+            ->where('is_shadow_banned', 0)
+            ->first();
+
+        if ($user !== null && $ref_user !== null) {
+            if ($invite_reg_money_reward !== 0) {
+                $money_before = $user->money;
+                $user->money += $invite_reg_money_reward;
+                $user->save();
+                // 添加余额记录
+                (new UserMoneyLog())->add(
+                    $user->id,
+                    (float) $money_before,
+                    (float) $user->money,
+                    $invite_reg_money_reward,
+                    '被用户 #' . $ref_user_id . ' 邀请注册奖励',
+                );
+            }
+
+            if ($invite_reg_traffic_reward !== 0) {
+                $ref_user->transfer_enable += Tools::toGB($invite_reg_traffic_reward);
+                $ref_user->save();
+            }
+        }
+    }
 }