Browse Source

feat: 优化钱包交易记录查询和字段选择

在WalletService和Coach/WalletService中,重构了getWalletRecords方法,移除了不必要的字段选择,增强了查询条件的灵活性,包括按交易类型、日期和金额范围筛选。同时,更新了返回数据的格式化逻辑,确保用户能够清晰地查看交易记录和统计信息。这些改进旨在提升数据的可读性和查询效率,优化用户体验。
刘学玺 2 months ago
parent
commit
bd28173e71
2 changed files with 52 additions and 57 deletions
  1. 0 18
      app/Services/Client/WalletService.php
  2. 52 39
      app/Services/Coach/WalletService.php

+ 0 - 18
app/Services/Client/WalletService.php

@@ -38,24 +38,6 @@ class WalletService
 
             // 获取钱包交易记录
             $paginator = $user->wallet->transRecords()
-                ->select([
-                    'id',
-                    'trans_no',
-                    'trans_type',
-                    'amount',
-                    'before_balance',
-                    'after_balance',
-                    'before_recharge_balance',
-                    'after_recharge_balance',
-                    'owner_type',
-                    'owner_id',
-                    'role',
-                    'storage_type',
-                    'trans_time',
-                    'remark',
-                    'state',
-                    'created_at'
-                ])
                 ->orderBy('created_at', 'desc')
                 ->paginate($perPage);
 

+ 52 - 39
app/Services/Coach/WalletService.php

@@ -68,29 +68,31 @@ class WalletService
 
             // 构建查询
             $query = WalletTransRecord::where('wallet_id', $user->coach->wallet->id)
-                // 修复参数名称错误
+                // 按交易类型筛选(1:收入 2:支出)
                 ->when(isset($params['type']), function ($query) use ($params) {
                     return $query->where('trans_type', $params['type']);
                 })
-                // 优化日期查询
+                // 按开始日期筛选
                 ->when(isset($params['start_date']), function ($query) use ($params) {
                     return $query->whereDate('created_at', '>=', $params['start_date']);
                 })
+                // 按结束日期筛选
                 ->when(isset($params['end_date']), function ($query) use ($params) {
                     return $query->whereDate('created_at', '<=', $params['end_date']);
                 })
-                // 添加金额范围筛选
+                // 按最小金额筛选
                 ->when(isset($params['min_amount']), function ($query) use ($params) {
                     return $query->where('amount', '>=', $params['min_amount']);
                 })
+                // 按最大金额筛选
                 ->when(isset($params['max_amount']), function ($query) use ($params) {
                     return $query->where('amount', '<=', $params['max_amount']);
                 })
-                // 添加交易状态筛选
+                // 按交易状态筛选(1:处理中 2:成功 3:失败)
                 ->when(isset($params['status']), function ($query) use ($params) {
                     return $query->where('state', $params['status']);
                 })
-                // 添加排序选项
+                // 添加排序条件,默认按创建时间倒序
                 ->when(
                     isset($params['sort_field']) && isset($params['sort_order']),
                     function ($query) use ($params) {
@@ -104,54 +106,65 @@ class WalletService
                     }
                 );
 
-            // 分页获取数据(添加字段选择)
+            // 分页获取数据,指定需要查询的字段
             $records = $query->paginate(
-                $params['per_page'] ?? 10,
+                $params['per_page'] ?? 10,  // 每页记录数,默认10条
                 [
-                    'id',
-                    'trans_no',
-                    'trans_type',
-                    'amount',
-                    'balance',
-                    'owner_type',
-                    'owner_id',
-                    'remark',
-                    'status',
-                    'created_at',
+                    'id',                           // 记录ID
+                    'trans_no',                     // 交易流水号
+                    'trans_type',                   // 交易类型(1:收入 2:支出)
+                    'amount',                       // 交易金额
+                    'before_balance',               // 交易前余额
+                    'after_balance',                // 交易后余额
+                    'before_recharge_balance',      // 交易前充值余额
+                    'after_recharge_balance',       // 交易后充值余额
+                    'owner_type',                   // 业务类型(profit:分账 recharge:充值 withdraw:提现等)
+                    'owner_id',                     // 业务类型编号
+                    'role',                         // 角色
+                    'storage_type',                 // 存储类型
+                    'trans_time',                   // 交易时间
+                    'remark',                       // 备注
+                    'state',                        // 交易状态(1:处理中 2:成功 3:失败)
+                    'created_at'                    // 创建时间
                 ],
-                'page',
-                $params['page'] ?? 1
+                'page',                            // 分页参数名
+                $params['page'] ?? 1               // 当前页码,默认第1页
             );
 
-            // TODO: 处理格式化数据存在的枚举映射
-
-            // 格式化数据
+            // 格式化返回数据
             $items = collect($records->items())->map(function ($record) {
                 return [
-                    'id' => $record->id,
-                    'trans_no' => $record->trans_no,
-                    'trans_type' => $this->formatTransType($record->trans_type),
-                    'amount' => number_format($record->amount, 2, '.', ''),
-                    'balance' => number_format($record->balance, 2, '.', ''),
-                    'owner_type' => $this->formatOwnerType($record->owner_type),
-                    'owner_id' => $record->owner_id,
-                    'remark' => $record->remark,
-                    'state' => $this->formatStatus($record->state),
-                    'created_at' => $record->created_at->format('Y-m-d H:i:s'),
+                    'id' => $record->id,                    // 记录ID
+                    'trans_no' => $record->trans_no,        // 交易流水号
+                    'trans_type' => $this->formatTransType($record->trans_type),  // 格式化交易类型
+                    'amount' => number_format($record->amount, 2, '.', ''),       // 格式化金额,保留2位小数
+                    'before_balance' => number_format($record->before_balance, 2, '.', ''),           // 交易前余额
+                    'after_balance' => number_format($record->after_balance, 2, '.', ''),            // 交易后余额
+                    'before_recharge_balance' => number_format($record->before_recharge_balance, 2, '.', ''),  // 交易前充值余额
+                    'after_recharge_balance' => number_format($record->after_recharge_balance, 2, '.', ''),   // 交易后充值余额
+                    'owner_type' => $this->formatOwnerType($record->owner_type),  // 格式化业务类型
+                    'owner_id' => $record->owner_id,        // 业务类型编号
+                    'role' => $record->role,                // 角色
+                    'storage_type' => $record->storage_type, // 存储类型
+                    'trans_time' => $record->trans_time ? $record->trans_time->format('Y-m-d H:i:s') : null,  // 格式化交易时间
+                    'remark' => $record->remark,            // 备注
+                    'state' => $this->formatStatus($record->state),  // 格式化交易状态
+                    'created_at' => $record->created_at->format('Y-m-d H:i:s')    // 格式化创建时间
                 ];
             });
 
-            // 添加汇总信息
+            // 计算统计数据
             $summary = [
-                'total_income' => $query->where('amount', '>', 0)->sum('amount'),
-                'total_expense' => abs($query->where('amount', '<', 0)->sum('amount')),
-                'record_count' => $records->total(),
+                'total_income' => $query->where('amount', '>', 0)->sum('amount'),     // 总收入
+                'total_expense' => abs($query->where('amount', '<', 0)->sum('amount')), // 总支出(取绝对值)
+                'record_count' => $records->total(),                                   // 总记录数
             ];
 
+            // 返回最终结果
             return [
-                'items' => $items,
-                'total' => $records->total(),
-                'summary' => $summary,
+                'items' => $items,           // 记录列表
+                'total' => $records->total(), // 总记录数
+                'summary' => $summary,       // 统计信息
             ];
         } catch (\Exception $e) {
             Log::error('获取钱包流水记录失败', [