gorden 16 ساعت پیش
والد
کامیت
8dd8f348fc
2فایلهای تغییر یافته به همراه204 افزوده شده و 7 حذف شده
  1. 9 7
      app/admin/controller/coupon/CardMainController.php
  2. 195 0
      app/admin/controller/finance/CardController.php

+ 9 - 7
app/admin/controller/coupon/CardMainController.php

@@ -146,6 +146,7 @@ class CardMainController extends Curd
 
         // 发行统计
         $cardTotal = Card::where('join_card_main_id', $cardMainId)->count();
+        $isIssueTotal = Card::where('join_card_main_id', $cardMainId)->where('is_issue', 'Y')->count();
         $cardInitTotal = Card::where('join_card_main_id', $cardMainId)->where('card_status', 'INIT')->count();
         $cardWaitingTotal = Card::where('join_card_main_id', $cardMainId)->where('card_status', 'WAITING')->count();
         $cardPendingTotal = Card::where('join_card_main_id', $cardMainId)->where('card_status', 'PENDING')->count();
@@ -156,6 +157,7 @@ class CardMainController extends Curd
         $statistics = [
             [
                 'total' => $cardTotal,
+                'isIssueTotal' => $isIssueTotal,
                 'initTotal' => $cardInitTotal,
                 'waitingTotal' => $cardWaitingTotal,
                 'pendingTotal' => $cardPendingTotal,
@@ -378,31 +380,31 @@ class CardMainController extends Curd
             // 发行统计
             $isIssueTotal = Card::where('is_issue', 'Y')->where('join_card_main_id', $total['card_main_id'])->count();
             $statistics['is_issue']['total'] += $isIssueTotal;
-            $statistics['is_issue']['amount'] = sprintf('%.2f', $statistics['is_issue']['total'] * $total['card_main_amount'] + $statistics['is_issue']['amount']);
+            $statistics['is_issue']['amount'] = sprintf('%.2f', $isIssueTotal * $total['card_main_amount'] + $statistics['is_issue']['amount']);
             // 待分配统计
             $initTotal = Card::where('card_status', 'INIT')->where('join_card_main_id', $total['card_main_id'])->count();
             $statistics['init']['total'] += $initTotal;
-            $statistics['init']['amount'] = sprintf('%.2f', $statistics['init']['total'] * $total['card_main_amount'] + $statistics['init']['amount']);
+            $statistics['init']['amount'] = sprintf('%.2f', $initTotal * $total['card_main_amount'] + $statistics['init']['amount']);
             // 已分配,待售统计
             $waitingTotal = Card::where('card_status', 'WAITING')->where('join_card_main_id', $total['card_main_id'])->count();
             $statistics['waiting']['total'] += $waitingTotal;
-            $statistics['waiting']['amount'] = sprintf('%.2f', $statistics['waiting']['total'] * $total['card_main_amount'] + $statistics['waiting']['amount']);
+            $statistics['waiting']['amount'] = sprintf('%.2f', $waitingTotal * $total['card_main_amount'] + $statistics['waiting']['amount']);
             // 已售,待激活统计
             $pendingTotal = Card::where('card_status', 'PENDING')->where('join_card_main_id', $total['card_main_id'])->count();
             $statistics['pending']['total'] += $pendingTotal;
-            $statistics['pending']['amount'] = sprintf('%.2f', $statistics['pending']['total'] * $total['card_main_amount'] + $statistics['pending']['amount']);
+            $statistics['pending']['amount'] = sprintf('%.2f', $pendingTotal * $total['card_main_amount'] + $statistics['pending']['amount']);
             // 已激活统计
             $usedTotal = Card::where('card_status', 'USED')->where('join_card_main_id', $total['card_main_id'])->count();
             $statistics['used']['total'] += $usedTotal;
-            $statistics['used']['amount'] = sprintf('%.2f', $statistics['used']['total'] * $total['card_main_amount']);
+            $statistics['used']['amount'] = sprintf('%.2f', $usedTotal * $total['card_main_amount']);
             // 使用完成统计
             $doneTotal = Card::where('card_status', 'DONE')->where('join_card_main_id', $total['card_main_id'])->count();
             $statistics['done']['total'] += $doneTotal;
-            $statistics['done']['amount'] = sprintf('%.2f', $statistics['done']['total'] * $total['card_main_amount'] + $statistics['done']['amount']);
+            $statistics['done']['amount'] = sprintf('%.2f', $doneTotal * $total['card_main_amount'] + $statistics['done']['amount']);
             // 冻结统计
             $pausedTotal = Card::where('card_status', 'PAUSED')->where('join_card_main_id', $total['card_main_id'])->count();
             $statistics['paused']['total'] += $pausedTotal;
-            $statistics['paused']['amount'] = sprintf('%.2f', $statistics['paused']['total'] * $total['card_main_amount'] + $statistics['paused']['total']);
+            $statistics['paused']['amount'] = sprintf('%.2f', $pausedTotal * $total['card_main_amount'] + $statistics['paused']['total']);
         }
         $statistics['total']['total'] = $statistics['init']['total'] + $statistics['waiting']['total']
             + $statistics['pending']['total'] + $statistics['used']['total'] + $statistics['done']['total']

+ 195 - 0
app/admin/controller/finance/CardController.php

@@ -0,0 +1,195 @@
+<?php
+
+namespace app\admin\controller\finance;
+
+use app\model\Card;
+use app\model\CardMain;
+use app\model\Member;
+use app\model\MemberRole;
+use support\Db;
+use support\Request;
+
+class CardController
+{
+
+    public function list(Request $request)
+    {
+        $page = $request->get('page', 1);
+        $pageSize = $request->get('pageSize', 20);
+        $classify = $request->get('card_main_classify');
+        $categoryId = $request->get('join_card_main_category_id');
+        $name = $request->get('card_main_name');
+        $addtimes = $request->get('card_main_addtimes');
+
+        $cardMain = CardMain::when(!empty($classify), function ($query) use ($classify) {
+            $query->where('card_main_classify', $classify);
+        })->when(!empty($categoryId), function ($query) use ($categoryId) {
+            $query->where('join_card_main_category_id', $categoryId);
+        })->when(!empty($name), function ($query) use ($name) {
+            $query->where('card_main_name', 'like', '%' . $name . '%');
+        })->when(!empty($addtimes), function ($query) use ($addtimes) {
+            $addtimes[0] = strtotime($addtimes[0]);
+            $addtimes[1] = strtotime($addtimes[1]);
+            $query->whereBetween('card_main_addtimes', $addtimes);
+        });
+        $total = $cardMain->count();
+        $rows = $cardMain->select('card_main_id', 'card_main_amount')
+            ->orderBy('card_addtimes', 'DESC')
+            ->forPage($page, $pageSize)
+            ->get()
+            ->toArray();
+        $statistics = [
+            'total' => ['total' => 0, 'amount' => 0],
+            'is_issue' => ['total' => 0, 'amount' => 0],
+            'init' => ['total' => 0, 'amount' => 0],
+            'waiting' => ['total' => 0, 'amount' => 0],
+            'pending' => ['total' => 0, 'amount' => 0],
+            'used' => ['total' => 0, 'amount' => 0],
+            'done' => ['total' => 0, 'amount' => 0],
+            'paused' => ['total' => 0, 'amount' => 0]
+        ];
+        foreach ($rows as &$row) {
+            // 发行统计
+            $isIssueTotal = Card::where('is_issue', 'Y')->where('join_card_main_id', $row['card_main_id'])->count();
+            $row['is_issue']['total'] = $isIssueTotal;
+            $row['is_issue']['amount'] = sprintf('%.2f', $isIssueTotal * $row['card_main_amount']);
+            $statistics['is_issue']['total'] += $isIssueTotal;
+            $statistics['is_issue']['amount'] = sprintf('%.2f', $isIssueTotal * $row['card_main_amount'] + $statistics['is_issue']['amount']);
+            // 待分配统计
+            $initTotal = Card::where('card_status', 'INIT')->where('join_card_main_id', $row['card_main_id'])->count();
+            $row['init']['total'] = $initTotal;
+            $row['init']['amount'] = sprintf('%.2f', $initTotal * $row['card_main_amount']);
+            $statistics['init']['total'] += $initTotal;
+            $statistics['init']['amount'] = sprintf('%.2f', $initTotal * $row['card_main_amount'] + $statistics['init']['amount']);
+            // 已分配,待售统计
+            $waitingTotal = Card::where('card_status', 'WAITING')->where('join_card_main_id', $row['card_main_id'])->count();
+            $row['waiting']['total'] = $waitingTotal;
+            $row['waiting']['amount'] = sprintf('%.2f', $waitingTotal * $row['card_main_amount']);
+            $statistics['waiting']['total'] += $waitingTotal;
+            $statistics['waiting']['amount'] = sprintf('%.2f', $waitingTotal * $row['card_main_amount'] + $statistics['waiting']['amount']);
+            // 已售,待激活统计
+            $pendingTotal = Card::where('card_status', 'PENDING')->where('join_card_main_id', $row['card_main_id'])->count();
+            $row['pending']['total'] = $pendingTotal;
+            $row['pending']['amount'] = sprintf('%.2f', $pendingTotal * $row['card_main_amount']);
+            $statistics['pending']['total'] += $pendingTotal;
+            $statistics['pending']['amount'] = sprintf('%.2f', $pendingTotal * $row['card_main_amount'] + $statistics['pending']['amount']);
+            // 已激活统计
+            $usedTotal = Card::where('card_status', 'USED')->where('join_card_main_id', $row['card_main_id'])->count();
+            $row['used']['total'] = $usedTotal;
+            $row['used']['amount'] = sprintf('%.2f', $usedTotal * $row['card_main_amount']);
+            $statistics['used']['total'] += $usedTotal;
+            $statistics['used']['amount'] = sprintf('%.2f', $usedTotal * $row['card_main_amount']+$statistics['used']['amount']);
+            // 使用完成统计
+            $doneTotal = Card::where('card_status', 'DONE')->where('join_card_main_id', $row['card_main_id'])->count();
+            $row['done']['total'] = $doneTotal;
+            $row['done']['amount'] = sprintf('%.2f', $doneTotal * $row['card_main_amount']);
+            $statistics['done']['total'] += $doneTotal;
+            $statistics['done']['amount'] = sprintf('%.2f', $doneTotal * $row['card_main_amount'] + $statistics['done']['amount']);
+            // 冻结统计
+            $pausedTotal = Card::where('card_status', 'PAUSED')->where('join_card_main_id', $row['card_main_id'])->count();
+            $row['paused']['total'] = $pausedTotal;
+            $row['paused']['amount'] = sprintf('%.2f', $pausedTotal * $row['card_main_amount']);
+            $statistics['paused']['total'] += $pausedTotal;
+            $statistics['paused']['amount'] = sprintf('%.2f', $pausedTotal * $row['card_main_amount'] + $statistics['paused']['total']);
+        }
+        $statistics['total']['total'] = $statistics['init']['total'] + $statistics['waiting']['total']
+            + $statistics['pending']['total'] + $statistics['used']['total'] + $statistics['done']['total']
+            + $statistics['paused']['total'];
+        $statistics['total']['amount'] = sprintf('%.2f', $statistics['init']['amount']
+            + $statistics['waiting']['amount'] + $statistics['pending']['amount'] + $statistics['used']['amount']
+            + $statistics['done']['amount'] + $statistics['paused']['amount']);
+
+        return json_success('success', compact('rows', 'page', 'pageSize', 'total', 'statistics'));
+    }
+
+    /**
+     * @Desc 导出
+     * @Author Gorden
+     * @Date 2024/11/19 8:56
+     *
+     * @param Request $request
+     * @return \support\Response
+     */
+    public function exportMemberAccount(Request $request)
+    {
+        $days = $request->get('member_addtimes', []);
+        $level = $request->get('level', '');
+        $memberId = $request->get('member_id');
+        $accountType = $request->get('account_type', 'CASH');
+        $premisesId = intval($request->get('premises_id', ''));
+        $memberAccountIds = $request->get('member_account_ids');
+        if (!empty($days)) {
+            $days[0] = strtotime($days[0]);
+            $days[1] = strtotime($days[1]);
+
+            $month = date('Ym', $days[0]);
+            $days[1] = strtotime(date('Y-m-d', $days[1]) . " 23:59:59");
+        } else {
+            $month = date('Ym');
+        }
+
+        // 兼容老等级搜索
+        $levelIds = [];
+        if (!empty($level)) {
+            $levelName = MemberRole::where('member_role_id', $level)->value('member_role_name');
+            if (!empty($levelName)) {
+                $levelIds = MemberRole::where('member_role_name', $levelName)->pluck('member_role_id')->toArray();
+            }
+        }
+        $rows = Member::with([
+            'cert' => function ($query) {
+                $query->select('join_cert_member_id', 'member_cert_name');
+            },
+            'info' => function ($query) {
+                $query->select('join_info_member_id', 'member_info_nickname');
+            },
+            'role' => function ($query) {
+                $query->select('member_role_id', 'member_role_name');
+            }
+        ])->join('member_account as ma', function ($join) use ($accountType) {
+            $join->on('member.member_id', '=', 'ma.join_account_member_id')->where('ma.member_account_classify', '=', $accountType);
+        })->leftJoin('member_role', 'member_role.member_role_id', 'member.join_member_role_id')
+            ->when(!empty($level), function ($query) use ($level, $levelIds) {
+                if ($level == '00') {
+                    $query->where('join_member_role_id', '')->orWhere('join_member_role_id', NULL);
+                } else if ($level == 'VIP') {
+                    $query->where('member.member_is_vip', 'Y');
+                } else if (!empty($levelIds)) {
+                    $query->whereIn('member_role.member_role_id', $levelIds);
+                } else {
+                    $query->where('join_member_role_id', $level);
+                }
+
+            })->when(!empty($memberId), function ($query) use ($memberId) {
+                $query->where('member.member_id', $memberId);
+            })->when(!empty($days), function ($query) use ($days) {
+                $query->whereBetween('member.member_addtimes', $days);
+            })->when(!empty($premisesId), function ($query) use ($premisesId) {
+                $query->whereJsonContains('member.member_extend_json->belong->premises', $premisesId);
+            })->when(!empty($memberAccountIds), function ($query) use ($memberAccountIds) {
+                $query->whereIn('member_account_id', $memberAccountIds);
+            })->where('member.member_mobile', '<>', '0000')
+            ->select('member.member_id', 'member.member_mobile', 'member.member_addtimes', 'member.join_member_role_id',
+                'ma.member_account_id as member_account_id', 'ma.member_account_income as member_account_income', 'ma.member_account_expend as member_account_expend', 'ma.member_account_surplus as member_account_surplus', 'ma.member_account_added as member_account_added'
+            )
+            ->orderBy('member.member_addtimes', 'DESC')
+            ->get()
+            ->toArray();
+
+        $data = [];
+        foreach ($rows as $row) {
+            $data[] = [
+                'nickname' => $row['info']['member_info_nickname'] ?? '--',
+                'mobile' => $row['member_mobile'] ?? '--',
+                'role_name' => $row['role']['member_role_name'] ?? '--',
+                'balance' => sprintf('%.2f', $row['member_account_surplus'] + $row['member_account_added']),
+                'income' => $row['member_account_income'],
+                'expend' => $row['member_account_expend'],
+                'added' => $row['member_account_added'],
+                'addtimes' => $row['member_addtimes']
+            ];
+        }
+
+        return json_success('success', $data);
+    }
+}