فهرست منبع

储值卡账户

gorden 3 ماه پیش
والد
کامیت
857d0d7ce5

+ 7 - 2
app/admin/controller/coupon/CardController.php

@@ -53,9 +53,11 @@ class CardController extends Curd
         if (!empty($cardMainName)) {
             $cardMainIds = CardMain::where('card_main_name', 'like', '%' . $cardMainName . '%')->pluck('card_main_id')->toArray();
         }
-        if (!empty($cardMainAmount)) {
+        if (!empty($cardMainAmount) && !empty($cardMainName)) {
             $mainIds = CardMain::where('card_main_amount', $cardMainAmount)->pluck('card_main_id')->toArray();
             $cardMainIds = array_intersect($cardMainIds, $mainIds);
+        } else if (!empty($cardMainAmount)) {
+            $cardMainIds = CardMain::where('card_main_amount', $cardMainAmount)->pluck('card_main_id')->toArray();
         }
         if (!empty($cardMainName) || !empty($cardMainAmount)) {
             $where['join_card_main_id'] = ['in', $cardMainIds];
@@ -64,6 +66,9 @@ class CardController extends Curd
             $cardIssueIds = CardIssue::where('card_issue_name', 'like', '%' . $cardIssueName . '%')->pluck('card_issue_id')->toArray();
             $where['join_card_issue_id'] = ['in', $cardIssueIds];
         }
+        if (!empty($where['card_id'])) {
+            $where['card_id'] = ['like', $where['card_id']];
+        }
 
         $query = $this->doSelect($where, $field, $order);
         return $this->doFormat($query, $format, $limit);
@@ -203,7 +208,7 @@ class CardController extends Curd
                 $query->select('card_issue_id', 'card_issue_name');
             }
         ])->when(!empty($cardId), function ($query) use ($cardId) {
-            $query->where('card_id', $cardId);
+            $query->where('card_id', 'like', '%' . $cardId . '%');
         })->when(!empty($deptId), function ($query) use ($deptId) {
             $query->where('join_card_dept_id', $deptId);
         })->when(!empty($memberId), function ($query) use ($memberId) {

+ 4 - 1
app/admin/controller/coupon/CardMainController.php

@@ -104,6 +104,9 @@ class CardMainController extends Curd
             } elseif ($item['card_main_valid_mode'] == 'DATE') {
                 $item['valid_term'] = date('Y/m/d', strtotime($item['card_main_valid_begin'])) . '-' . date('Y/m/d', strtotime($item['card_main_valid_end']));
             }
+
+            $item['total'] = Card::where('join_card_main_id', $item['card_main_id'])->count();
+            $item['amount'] = sprintf('%.2f', $item['total'] * $item['card_main_amount']);
         }
 
         return $items;
@@ -368,7 +371,7 @@ class CardMainController extends Curd
         })->when(!empty($name), function ($query) use ($name) {
             $query->where('card_main_name', 'like', '%' . $name . '%');
         })->when(!empty($amount), function ($query) use ($amount) {
-            $query->where('card_main_amount',  $amount);
+            $query->where('card_main_amount', $amount);
         })->when(!empty($addtimes), function ($query) use ($addtimes) {
             $addtimes[0] = strtotime($addtimes[0]);
             $addtimes[1] = strtotime($addtimes[1]);

+ 39 - 34
app/admin/controller/finance/CardController.php

@@ -19,8 +19,11 @@ class CardController
         $times[0] = strtotime($times[0]);
         $times[1] = strtotime(date('Y-m-d 23:59:59', strtotime($times[1])));
         $name = $request->get('card_main_name');
+        $searchMainAmount = $request->get('card_main_amount');
         $cardMain = CardMain::when(!empty($name), function ($query) use ($name) {
             $query->where('card_main_name', 'like', '%' . $name . '%');
+        })->when(!empty($searchMainAmount), function ($query) use ($searchMainAmount) {
+            $query->where('card_main_amount', $searchMainAmount);
         })->get()
             ->toArray();
         $cardIds = array_column($cardMain, 'card_main_id');
@@ -39,40 +42,39 @@ class CardController
         ];
         $data = [];
         foreach ($cardStatus as $key => $status) {
-            $cards = Card::when(!empty($cardIds), function ($query) use ($cardIds) {
-                $query->whereIn('join_card_main_id', $cardIds);
-            })->when($status == 'ISSUE', function ($query) use ($times) {
-                $query->whereRaw("CAST(UNIX_TIMESTAMP(JSON_UNQUOTE(JSON_EXTRACT(card_extend_json,'$.issue_datetime'))) as SIGNED) >= {$times[0]}")
-                    ->whereRaw("CAST(UNIX_TIMESTAMP(JSON_UNQUOTE(JSON_EXTRACT(card_extend_json,'$.issue_datetime'))) as SIGNED) <= {$times[1]}")
-                    ->selectRaw("DATE_FORMAT(FROM_UNIXTIME(UNIX_TIMESTAMP( JSON_UNQUOTE( JSON_EXTRACT( card_extend_json, '$.issue_datetime' )))),'%Y-%m-%d') AS group_by_time");
-            })->when($status == 'ADD', function ($query) use ($times) {
-                $query->whereBetween('card_addtimes', $times)
-                    ->selectRaw("DATE_FORMAT(FROM_UNIXTIME(card_addtimes),'%Y-%m-%d') AS group_by_time");
-            })->when($status == 'WAITING', function ($query) use ($times) {
-                $query->whereRaw("CAST(UNIX_TIMESTAMP(card_assign_datetime) as SIGNED) >= {$times[0]}")
-                    ->whereRaw("CAST(UNIX_TIMESTAMP(card_assign_datetime) as SIGNED) <= {$times[1]}")
-                    ->selectRaw("DATE_FORMAT(FROM_UNIXTIME(UNIX_TIMESTAMP(card_assign_datetime)),'%Y-%m-%d') AS group_by_time");
-            })->when($status == 'PENDING', function ($query) use ($times) {
-                $query->whereRaw("CAST(UNIX_TIMESTAMP(JSON_UNQUOTE(JSON_EXTRACT(card_extend_json,'$.buy_datetime'))) as SIGNED) >= {$times[0]}")
-                    ->whereRaw("CAST(UNIX_TIMESTAMP(JSON_UNQUOTE(JSON_EXTRACT(card_extend_json,'$.buy_datetime'))) as SIGNED) <= {$times[1]}")
-                    ->selectRaw("DATE_FORMAT(FROM_UNIXTIME(UNIX_TIMESTAMP( JSON_UNQUOTE( JSON_EXTRACT( card_extend_json, '$.buy_datetime' )))),'%Y-%m-%d') AS group_by_time");
-            })->when($status == 'USED', function ($query) use ($times) {
-                $query->whereRaw("CAST(UNIX_TIMESTAMP(JSON_UNQUOTE(JSON_EXTRACT(card_extend_json,'$.used_datetime'))) as SIGNED) >= {$times[0]}")
-                    ->whereRaw("CAST(UNIX_TIMESTAMP(JSON_UNQUOTE(JSON_EXTRACT(card_extend_json,'$.used_datetime'))) as SIGNED) <= {$times[1]}")
-                    ->selectRaw("DATE_FORMAT(FROM_UNIXTIME(UNIX_TIMESTAMP( JSON_UNQUOTE( JSON_EXTRACT( card_extend_json, '$.used_datetime' )))),'%Y-%m-%d') AS group_by_time");
-            })->when($status == 'DONE', function ($query) use ($times) {
-                $query->whereRaw("CAST(UNIX_TIMESTAMP(JSON_UNQUOTE(JSON_EXTRACT(card_extend_json,'$.done_time'))) as SIGNED) >= {$times[0]}")
-                    ->whereRaw("CAST(UNIX_TIMESTAMP(JSON_UNQUOTE(JSON_EXTRACT(card_extend_json,'$.done_time'))) as SIGNED) <= {$times[1]}")
-                    ->selectRaw("DATE_FORMAT(FROM_UNIXTIME(UNIX_TIMESTAMP( JSON_UNQUOTE( JSON_EXTRACT( card_extend_json, '$.done_time' )))),'%Y-%m-%d') AS group_by_time");
-            })->when($status == 'EXPIRED', function ($query) use ($times) {
-                $query->whereRaw("CAST(UNIX_TIMESTAMP(JSON_UNQUOTE(JSON_EXTRACT(card_extend_json,'$.expired_datetime'))) as SIGNED) >= {$times[0]}")
-                    ->whereRaw("CAST(UNIX_TIMESTAMP(JSON_UNQUOTE(JSON_EXTRACT(card_extend_json,'$.expired_datetime'))) as SIGNED) <= {$times[1]}")
-                    ->selectRaw("DATE_FORMAT(FROM_UNIXTIME(UNIX_TIMESTAMP( JSON_UNQUOTE( JSON_EXTRACT( card_extend_json, '$.expired_datetime' )))),'%Y-%m-%d') AS group_by_time");
-            })->when($status == 'PAUSED', function ($query) use ($times) {
-                $query->whereRaw("CAST(UNIX_TIMESTAMP(JSON_UNQUOTE(JSON_EXTRACT(card_extend_json,'$.paused_datetime'))) as SIGNED) >= {$times[0]}")
-                    ->whereRaw("CAST(UNIX_TIMESTAMP(JSON_UNQUOTE(JSON_EXTRACT(card_extend_json,'$.paused_datetime'))) as SIGNED) <= {$times[1]}")
-                    ->selectRaw("DATE_FORMAT(FROM_UNIXTIME(UNIX_TIMESTAMP( JSON_UNQUOTE( JSON_EXTRACT( card_extend_json, '$.paused_datetime' )))),'%Y-%m-%d') AS group_by_time");
-            })->selectRaw('count(card_id) as total,join_card_main_id')
+            $cards = Card::whereIn('join_card_main_id', $cardIds)
+                ->when($status == 'ISSUE', function ($query) use ($times) {
+                    $query->whereRaw("CAST(UNIX_TIMESTAMP(JSON_UNQUOTE(JSON_EXTRACT(card_extend_json,'$.issue_datetime'))) as SIGNED) >= {$times[0]}")
+                        ->whereRaw("CAST(UNIX_TIMESTAMP(JSON_UNQUOTE(JSON_EXTRACT(card_extend_json,'$.issue_datetime'))) as SIGNED) <= {$times[1]}")
+                        ->selectRaw("DATE_FORMAT(FROM_UNIXTIME(UNIX_TIMESTAMP( JSON_UNQUOTE( JSON_EXTRACT( card_extend_json, '$.issue_datetime' )))),'%Y-%m-%d') AS group_by_time");
+                })->when($status == 'ADD', function ($query) use ($times) {
+                    $query->whereBetween('card_addtimes', $times)
+                        ->selectRaw("DATE_FORMAT(FROM_UNIXTIME(card_addtimes),'%Y-%m-%d') AS group_by_time");
+                })->when($status == 'WAITING', function ($query) use ($times) {
+                    $query->whereRaw("CAST(UNIX_TIMESTAMP(card_assign_datetime) as SIGNED) >= {$times[0]}")
+                        ->whereRaw("CAST(UNIX_TIMESTAMP(card_assign_datetime) as SIGNED) <= {$times[1]}")
+                        ->selectRaw("DATE_FORMAT(FROM_UNIXTIME(UNIX_TIMESTAMP(card_assign_datetime)),'%Y-%m-%d') AS group_by_time");
+                })->when($status == 'PENDING', function ($query) use ($times) {
+                    $query->whereRaw("CAST(UNIX_TIMESTAMP(JSON_UNQUOTE(JSON_EXTRACT(card_extend_json,'$.buy_datetime'))) as SIGNED) >= {$times[0]}")
+                        ->whereRaw("CAST(UNIX_TIMESTAMP(JSON_UNQUOTE(JSON_EXTRACT(card_extend_json,'$.buy_datetime'))) as SIGNED) <= {$times[1]}")
+                        ->selectRaw("DATE_FORMAT(FROM_UNIXTIME(UNIX_TIMESTAMP( JSON_UNQUOTE( JSON_EXTRACT( card_extend_json, '$.buy_datetime' )))),'%Y-%m-%d') AS group_by_time");
+                })->when($status == 'USED', function ($query) use ($times) {
+                    $query->whereRaw("CAST(UNIX_TIMESTAMP(JSON_UNQUOTE(JSON_EXTRACT(card_extend_json,'$.used_datetime'))) as SIGNED) >= {$times[0]}")
+                        ->whereRaw("CAST(UNIX_TIMESTAMP(JSON_UNQUOTE(JSON_EXTRACT(card_extend_json,'$.used_datetime'))) as SIGNED) <= {$times[1]}")
+                        ->selectRaw("DATE_FORMAT(FROM_UNIXTIME(UNIX_TIMESTAMP( JSON_UNQUOTE( JSON_EXTRACT( card_extend_json, '$.used_datetime' )))),'%Y-%m-%d') AS group_by_time");
+                })->when($status == 'DONE', function ($query) use ($times) {
+                    $query->whereRaw("CAST(UNIX_TIMESTAMP(JSON_UNQUOTE(JSON_EXTRACT(card_extend_json,'$.done_time'))) as SIGNED) >= {$times[0]}")
+                        ->whereRaw("CAST(UNIX_TIMESTAMP(JSON_UNQUOTE(JSON_EXTRACT(card_extend_json,'$.done_time'))) as SIGNED) <= {$times[1]}")
+                        ->selectRaw("DATE_FORMAT(FROM_UNIXTIME(UNIX_TIMESTAMP( JSON_UNQUOTE( JSON_EXTRACT( card_extend_json, '$.done_time' )))),'%Y-%m-%d') AS group_by_time");
+                })->when($status == 'EXPIRED', function ($query) use ($times) {
+                    $query->whereRaw("CAST(UNIX_TIMESTAMP(JSON_UNQUOTE(JSON_EXTRACT(card_extend_json,'$.expired_datetime'))) as SIGNED) >= {$times[0]}")
+                        ->whereRaw("CAST(UNIX_TIMESTAMP(JSON_UNQUOTE(JSON_EXTRACT(card_extend_json,'$.expired_datetime'))) as SIGNED) <= {$times[1]}")
+                        ->selectRaw("DATE_FORMAT(FROM_UNIXTIME(UNIX_TIMESTAMP( JSON_UNQUOTE( JSON_EXTRACT( card_extend_json, '$.expired_datetime' )))),'%Y-%m-%d') AS group_by_time");
+                })->when($status == 'PAUSED', function ($query) use ($times) {
+                    $query->whereRaw("CAST(UNIX_TIMESTAMP(JSON_UNQUOTE(JSON_EXTRACT(card_extend_json,'$.paused_datetime'))) as SIGNED) >= {$times[0]}")
+                        ->whereRaw("CAST(UNIX_TIMESTAMP(JSON_UNQUOTE(JSON_EXTRACT(card_extend_json,'$.paused_datetime'))) as SIGNED) <= {$times[1]}")
+                        ->selectRaw("DATE_FORMAT(FROM_UNIXTIME(UNIX_TIMESTAMP( JSON_UNQUOTE( JSON_EXTRACT( card_extend_json, '$.paused_datetime' )))),'%Y-%m-%d') AS group_by_time");
+                })->selectRaw('count(card_id) as total,join_card_main_id')
                 ->groupBy('join_card_main_id', 'group_by_time')
                 ->get()
                 ->toArray();
@@ -148,8 +150,11 @@ class CardController
         $times[1] = strtotime(date('Y-m-d 23:59:59', strtotime($times[1])));
         $name = $request->get('card_main_name');
         $keys = $request->get('keys', []);
+        $searchMainAmount = $request->get('card_main_amount');
         $cardMain = CardMain::when(!empty($name), function ($query) use ($name) {
             $query->where('card_main_name', 'like', '%' . $name . '%');
+        })->when(!empty($searchMainAmount), function ($query) use ($searchMainAmount) {
+            $query->where('card_main_amount', $searchMainAmount);
         })->get()
             ->toArray();
         $cardIds = array_column($cardMain, 'card_main_id');

+ 17 - 0
app/admin/controller/member/MemberController.php

@@ -448,6 +448,23 @@ class MemberController
         return MemberService::vipInfo($request);
     }
 
+    /**
+     * @Desc 储值卡账户列表
+     * @Author Gorden
+     * @Date 2024/11/19 11:46
+     *
+     * @param Request $request
+     * @return \support\Response
+     */
+    public function cardList(Request $request)
+    {
+        $memberId = $request->get('member_id', '');
+        if (!$memberId) {
+            return json_fail("参数错误");
+        }
+
+        return MemberService::cardList($request);
+    }
     /**
      * @Desc 储值卡账户明细
      * @Author Gorden

+ 6 - 1
app/admin/controller/order/CardController.php

@@ -219,6 +219,7 @@ class CardController extends Curd
     public function getCardList(Request $request)
     {
         $orderId = $request->get('order_id');
+        $deptId = $request->get('dept_id', '');
         $goodsId = OrderSheet::where('join_sheet_order_id', $orderId)->value('join_sheet_goods_id');
         $goods = Goods::where('goods_id', $goodsId)->select('goods_attribute_json')->first();
         $cards = [];
@@ -227,8 +228,12 @@ class CardController extends Curd
             if (!empty($goodsAttributeJson['card_main_id'])) {
                 $cards = Card::where('join_card_main_id', $goodsAttributeJson['card_main_id'])
                     ->where('card_status', 'WAITING')
+                    ->when(!empty($deptId), function ($query) use ($deptId) {
+                        $query->where('join_card_dept_id', $deptId);
+                    })
                     ->where('is_issue', 'Y')
-                    ->pluck('card_id')
+                    ->select('card_id', 'join_card_dept_id')
+                    ->get()
                     ->toArray();
             }
         }

+ 64 - 34
app/admin/service/member/MemberService.php

@@ -57,9 +57,7 @@ class MemberService
         }
 
         $rows = Member::with([
-            'account' => function ($query) {
-                $query->where('member_account_status', 'ACTIVED');
-            }
+            'account'
         ])->where('member_is_owner', 'N')
             ->where('member_mobile', '<>', '0000')
             ->leftJoin('member_info', 'member_info.join_info_member_id', 'member.member_id')
@@ -196,13 +194,19 @@ class MemberService
                             'member_account_added' => $item['member_account_added'],
                         ];
                     } else if ($item['member_account_classify'] == 'CARD') {
-                        $account['card'] = [
-                            'member_account_name' => $item['member_account_name'],
-                            'member_account_income' => $item['member_account_income'],
-                            'member_account_expend' => $item['member_account_expend'],
-                            'member_account_surplus' => $item['member_account_surplus'],
-                            'member_account_added' => $item['member_account_added'],
-                        ];
+                        if (isset($account['card'])) {
+                            $account['card']['member_account_income'] += $item['member_account_income'];
+                            $account['card']['member_account_expend'] += $item['member_account_expend'];
+                            $account['card']['member_account_surplus'] += $item['member_account_surplus'];
+                            $account['card']['member_account_added'] += $item['member_account_added'];
+                        } else {
+                            $account['card'] = [
+                                'member_account_income' => $item['member_account_income'],
+                                'member_account_expend' => $item['member_account_expend'],
+                                'member_account_surplus' => $item['member_account_surplus'],
+                                'member_account_added' => $item['member_account_added'],
+                            ];
+                        }
                     } else if ($item['member_account_classify'] == 'VIP') {
                         $account['vip'] = [
                             'member_account_name' => $item['member_account_name'],
@@ -743,6 +747,32 @@ class MemberService
         return json_success('', compact('rows', 'page', 'pageSize', 'total'));
     }
 
+    /**
+     * @Desc 我的储值卡列表
+     * @Author Gorden
+     * @Date 2024/12/2 17:12
+     *
+     * @param Request $request
+     * @return Response
+     */
+    public static function cardList(Request $request)
+    {
+        $page = $request->get('page', 1);
+        $pageSize = $request->get('pageSize', 20);
+        $memberId = $request->get('member_id');
+        $accounts = MemberAccount::where('join_account_member_id', $memberId);
+        $total = $accounts->count();
+        $rows = $accounts->orderByDesc('member_account_addtimes')
+            ->forPage($page, $pageSize)
+            ->get()
+            ->toArray();
+        foreach ($rows as &$row){
+            $row['member_account_surplus'] += $row['member_account_added'];
+        }
+
+        return json_success('success', compact('total', 'rows', 'page', 'pageSize'));
+    }
+
     /**
      * @Desc 储值卡账户明细
      * @Author Gorden
@@ -795,7 +825,7 @@ class MemberService
                 }
             }
             $item['goods_category'] = implode(',', array_unique($categoryName));
-            if (in_array($item['pay_category'], ['RECHARGE','REFUND'])) {
+            if (in_array($item['pay_category'], ['RECHARGE', 'REFUND'])) {
                 $item['balance_type'] = 'add';
             } else {
                 $item['balance_type'] = 'cut';
@@ -806,12 +836,12 @@ class MemberService
         }
 
         // 绑定记录
-        $memberAccountLists = MemberAccountList::where('join_list_member_account_nbr',$accountNbr)
-            ->where('member_account_list_attr','IN')
-            ->select('member_account_list_amount','member_account_list_datetime','member_account_list_attr','join_list_member_account_nbr','member_account_list_addtimes')
+        $memberAccountLists = MemberAccountList::where('join_list_member_account_nbr', $accountNbr)
+            ->where('member_account_list_attr', 'IN')
+            ->select('member_account_list_amount', 'member_account_list_datetime', 'member_account_list_attr', 'join_list_member_account_nbr', 'member_account_list_addtimes')
             ->get()
             ->toArray();
-        foreach ($memberAccountLists as $item){
+        foreach ($memberAccountLists as $item) {
             $data[] = [
                 'goods_category' => '',
                 'balance' => $item['member_account_list_amount'],
@@ -2220,28 +2250,28 @@ class MemberService
     /**
      * 卡用完了
      */
-    public static function accountToDone($accountId,$surplus,$added)
+    public static function accountToDone($accountId, $surplus, $added)
     {
-        try{
-            $account = MemberAccount::where('member_account_id',$accountId)
-                ->where('member_account_classify','CARD')
+        try {
+            $account = MemberAccount::where('member_account_id', $accountId)
+                ->where('member_account_classify', 'CARD')
                 ->first();
-                if (!empty($account) && $surplus <= 0 && $added <= 0){
-                    // 卡已完成
-                    $card = Card::where('join_card_member_account_id', $accountId)->first();
-                    $cardExtendJson = [];
-                    if (!empty($card->card_extend_json)){
-                        $cardExtendJson = json_decode($card->card_extend_json,true);
-                    }
-                    $cardExtendJson['done_time'] = date('Y-m-d H:i:s');
-                    $card->card_status = 'DONE';
-                    $card->card_extend_json = json_encode($cardExtendJson);
-                    $card->save();
-                    // 卡账户已完成
-                    $account->member_account_status = 'DONE';
-                    $account->save();
+            if (!empty($account) && $surplus <= 0 && $added <= 0) {
+                // 卡已完成
+                $card = Card::where('join_card_member_account_id', $accountId)->first();
+                $cardExtendJson = [];
+                if (!empty($card->card_extend_json)) {
+                    $cardExtendJson = json_decode($card->card_extend_json, true);
                 }
-        }catch (\Exception $e){
+                $cardExtendJson['done_time'] = date('Y-m-d H:i:s');
+                $card->card_status = 'DONE';
+                $card->card_extend_json = json_encode($cardExtendJson);
+                $card->save();
+                // 卡账户已完成
+                $account->member_account_status = 'DONE';
+                $account->save();
+            }
+        } catch (\Exception $e) {
             Log::error("卡完成状态处理失败");
         }
     }

+ 1 - 0
route/admin.php

@@ -822,6 +822,7 @@ Route::group('/admin', function () {
             Route::get('/couponCount', [\app\admin\controller\member\MemberController::class, 'couponCount']);
             Route::get('/couponDetail', [\app\admin\controller\member\MemberController::class, 'couponDetail']);
             Route::get('/balanceInfo', [\app\admin\controller\member\MemberController::class, 'balanceInfo']);
+            Route::get('/cardList', [\app\admin\controller\member\MemberController::class, 'cardList']);
             Route::get('/pointInfo', [\app\admin\controller\member\MemberController::class, 'pointInfo']);
             Route::get('/list', [\app\admin\controller\member\MemberController::class, 'list']);
             Route::get('/info', [\app\admin\controller\member\MemberController::class, 'info']);