WithdrawalDemo.php 1.3 KB

1234567891011121314151617181920212223242526
  1. <?php
  2. declare(strict_types=1);
  3. namespace plugin\saiadmin\app\service\finance;
  4. use plugin\saiadmin\app\model\water\WaterWithdrawalDemo;
  5. /** Optional demonstration data stays separate from real finance totals and capabilities. */
  6. final class WithdrawalDemo
  7. {
  8. public function listing(FinanceFilters $filters): array
  9. {
  10. $empty = ['list' => [], 'total' => 0, 'amount_cents' => 0];
  11. $model = new WaterWithdrawalDemo();
  12. if ($filters->source === 'regular' || !$model->getConnection()->getSchemaBuilder()->hasTable($model->getTable())) {
  13. return $empty;
  14. }
  15. $query = $model->newQuery()
  16. ->where('status', 'pending')
  17. ->whereBetween('created_at', [$filters->start->format('Y-m-d H:i:s'), $filters->end->format('Y-m-d H:i:s')]);
  18. $totals = (clone $query)->selectRaw('COUNT(*) AS total, COALESCE(SUM(amount_cents), 0) AS cents')->first();
  19. $rows = $query->orderByDesc('created_at')->orderByDesc('id')->limit(20)
  20. ->get(['id', 'reference', 'applicant_name', 'kind_label', 'channel_label', 'amount_cents', 'created_at'])
  21. ->map(fn ($row) => $row->toArray() + ['is_demo' => true, 'status_label' => '待审核(测试)'])->all();
  22. return ['list' => $rows, 'total' => (int)$totals->total, 'amount_cents' => (int)$totals->cents];
  23. }
  24. }