Browse Source

feat: gateway log display for admin

M1Screw 2 years ago
parent
commit
3452dfa5f0

+ 3 - 0
app/routes.php

@@ -237,6 +237,9 @@ return static function (Slim\App $app): void {
         // 用户余额日志
         $group->get('/moneylog', App\Controllers\Admin\MoneyLogController::class . ':log');
         $group->post('/moneylog/ajax', App\Controllers\Admin\MoneyLogController::class . ':ajax');
+        // 支付网关日志
+        $group->get('/gateway', App\Controllers\Admin\PaylistController::class . ':gateway');
+        $group->post('/gateway/ajax', App\Controllers\Admin\PaylistController::class . ':ajax');
         // 设置中心
         $group->get('/setting/billing', App\Controllers\Admin\Setting\BillingController::class . ':billing');
         $group->post('/setting/billing', App\Controllers\Admin\Setting\BillingController::class . ':saveBilling');

+ 94 - 0
resources/views/tabler/admin/log/gateway.tpl

@@ -0,0 +1,94 @@
+{include file='admin/tabler_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>
+        var table = $('#data_table').DataTable({
+            ajax: {
+                url: '/admin/gateway/ajax',
+                type: 'POST',
+                dataSrc: 'paylists'
+            },
+            "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/tabler_footer.tpl'}

+ 61 - 0
src/Controllers/Admin/PaylistController.php

@@ -0,0 +1,61 @@
+<?php
+
+declare(strict_types=1);
+
+namespace App\Controllers\Admin;
+
+use App\Controllers\BaseController;
+use App\Models\Paylist;
+use App\Utils\Tools;
+use Exception;
+use Psr\Http\Message\ResponseInterface;
+use Slim\Http\Response;
+use Slim\Http\ServerRequest;
+
+final class PaylistController extends BaseController
+{
+    public static array $details =
+    [
+        'field' => [
+            'id' => '事件ID',
+            'userid' => '用户ID',
+            'total' => '金额',
+            'status' => '状态',
+            'gateway' => '支付网关',
+            'tradeno' => '网关单号',
+            'datetime' => '支付时间',
+            'invoice_id' => '关联账单ID',
+        ],
+    ];
+
+    /**
+     * 后台网关记录页面
+     *
+     * @throws Exception
+     */
+    public function gateway(ServerRequest $request, Response $response, array $args): Response|ResponseInterface
+    {
+        return $response->write(
+            $this->view()
+                ->assign('details', self::$details)
+                ->fetch('admin/log/gateway.tpl')
+        );
+    }
+
+    /**
+     * 后台网关记录页面 AJAX
+     */
+    public function ajax(ServerRequest $request, Response $response, array $args): Response|ResponseInterface
+    {
+        $paylists = Paylist::orderBy('id', 'desc')->get();
+
+        foreach ($paylists as $paylist) {
+            $paylist->status = Tools::getPaylistStatus($paylist);
+            $paylist->datetime = Tools::toDateTime((int) $paylist->datetime);
+        }
+
+        return $response->withJson([
+            'paylists' => $paylists,
+        ]);
+    }
+}

+ 2 - 2
src/Controllers/Admin/UserController.php

@@ -171,9 +171,9 @@ final class UserController extends BaseController
 
         if ($request->getParam('money') !== '' &&
             $request->getParam('money') !== null &&
-            (double) $request->getParam('money') !== (float) $user->money
+            (float) $request->getParam('money') !== (float) $user->money
         ) {
-            $money = (double) $request->getParam('money');
+            $money = (float) $request->getParam('money');
             $diff = $money - $user->money;
             $remark = ($diff > 0 ? '管理员添加余额' : '管理员扣除余额');
             (new UserMoneyLog())->addMoneyLog($id, (float) $user->money, $money, $diff, $remark);

+ 12 - 0
src/Utils/Tools.php

@@ -583,4 +583,16 @@ final class Tools
         }
         return '未知';
     }
+
+    /**
+     * 优惠码类型
+     */
+    public static function getPaylistStatus($paylist): string
+    {
+        return match ($paylist->status) {
+            0 => '未支付',
+            1 => '已支付',
+            default => '未知',
+        };
+    }
 }