Procházet zdrojové kódy

会员绑定储值卡

gorden před 3 měsíci
rodič
revize
b86139df97

+ 2 - 1
app/admin/controller/finance/CommissionListController.php

@@ -26,6 +26,7 @@ class CommissionListController extends Curd
         [$where, $format, $limit, $field, $order] = $this->selectInput($request);
         $order = $request->get('order', 'desc');
         $field = $field ?? 'member_account_list_addtimes';
+        $where['member_account_list_classify'] = ['in', ['PARTNER', 'REFERRER', 'FRANCHISEE']];
         $query = $this->doSelect($where, $field, $order);
         return $this->doFormat($query, $format, $limit);
     }
@@ -129,7 +130,7 @@ class CommissionListController extends Curd
         $monthEnd = strtotime(date('Y-m-t 23:59:59'));
 
         $commissionModel = MemberAccountList::where('member_account_list_attr', 'IN')
-            ->where('member_account_list_status','ACTIVED')
+            ->where('member_account_list_status', 'ACTIVED')
             ->selectRaw("SUM(member_account_list_amount) as amount, COUNT(member_account_list_id) as total");
 
         $totalModel = clone $commissionModel;

+ 86 - 6
app/admin/controller/member/AccountController.php

@@ -4,10 +4,13 @@ namespace app\admin\controller\member;
 
 use app\controller\Curd;
 use app\model\Card;
+use app\model\Member;
 use app\model\MemberAccount;
+use app\model\MemberAccountList;
 use app\model\MemberBenefit;
 use support\Db;
 use support\exception\BusinessException;
+use support\Redis;
 use support\Request;
 use Tinywan\Jwt\JwtToken;
 
@@ -145,30 +148,107 @@ class AccountController extends Curd
         }
     }
 
+    /**
+     * @Desc 会员绑定储值卡
+     * @Author Gorden
+     * @Date 2024/11/19 11:12
+     *
+     * @param Request $request
+     * @return \support\Response
+     */
     public function bindCard(Request $request)
     {
         $cardId = $request->post('card_id');
         $cardKey = $request->post('card_cdkey');
         $memberId = $request->post('member_id');
-        $card = Card::where('card_id',$cardId)->where('card_cdkey',$cardKey)->first();
-        if (!$card){
+        if (!Member::where('member_id', $memberId)->where('member_status', 'ACTIVED')->exists()) {
+            return json_fail('会员不存在');
+        }
+        // 防刷
+        $redisKey = $memberId . '_' . $cardId;
+        $num = 0;
+        if (Redis::exists($redisKey)) {
+            $num = Redis::get($redisKey);
+        }
+        if ($num >= 3) {
+            return json_fail("请30分钟后重试");
+        }
+        Redis::set($redisKey, $num + 1, 'EX', 1800);
+
+        $card = Card::with([
+            'main' => function ($query) {
+                $query->select('card_main_id', 'card_main_name','card_main_amount','card_main_added');
+            }
+        ])->where('card_id', $cardId)
+            ->first();
+        if (!$card || empty($card->main)) {
             return json_fail("卡号不存在");
         }
-        if ($card->is_issue == 'N'){
+        if ($card->card_cdkey != $cardKey){
+            return json_fail("秘钥错误,请重新输入");
+        }
+        if ($card->is_issue == 'N') {
             return json_fail("卡号未发行");
         }
-        if (!in_array($card->card_status,['INIT','WAITING','PENDING'])){
+        if (!in_array($card->card_status, ['INIT', 'WAITING', 'PENDING'])) {
             return json_fail("卡号不是可绑定状态");
         }
+        // 清除防刷
+        Redis::del($redisKey);
 
         Db::beginTransaction();
         try {
-            //
+            $duedate = 0;
+            if ($card->main->card_main_valid_mode == 'DAYS') {
+                $duedate = date('Y-m-d H:i:s', strtotime("+ " . $card->main->card_main_valid_days . "days") - 1);
+            } elseif ($card->main->card_main_valid_mode == 'DATE') {
+                $duedate = $card->main->card_main_valid_end;
+            }
+            // 创建储值卡账户
+            $accountId = MemberAccount::insertGetId([
+                'join_account_member_id' => $memberId,
+                'member_account_classify' => 'CARD',
+                'member_account_status' => 'ACTIVED',
+                'member_account_category' => 'NORMAL',
+                'member_account_nbr' => $card->card_id,
+                'member_account_name' => $card->main->card_main_name,
+                'member_account_income' => $card->main->card_main_amount,
+                'member_account_surplus' => $card->main->card_main_amount,
+                'member_account_added' => $card->main->card_main_added,
+                'member_account_duedate' => $duedate,
+                'member_account_addtimes' => time(),
+                'member_account_update_user_id' => JwtToken::getCurrentId(),
+                'member_account_updatetimes' => time()
+            ]);
+
+            // 会员绑定卡
+            $card->join_card_member_id = $memberId;
+            $card->join_card_member_account_id = $accountId;
+            $card->card_assign_datetime = date('Y-m-d H:i:s');
+            $card->card_deadline_datetime = $duedate;
+            $card->card_status = 'USED';
+            $card->save();
+
+            // member_account_list 加卡充值记录
+            MemberAccountList::insert([
+                'join_list_member_account_nbr' => $cardId,
+                'join_member_account_list_member_id' => $memberId,
+                'member_account_list_status' => 'ACTIVED',
+                'member_account_list_attr' => 'IN',
+                'member_account_list_classify' => 'CARD',
+                'member_account_list_category' => '绑定储值卡',
+                'member_account_list_datetime' => date('Y-m-d H:i:s'),
+                'member_account_list_amount' => $card->main->card_main_amount,
+                'member_account_list_addtimes' => time()
+            ]);
 
             Db::commit();
-        }catch (\Exception $e){
 
+            return json_success('success');
+        } catch (\Exception $e) {
             Db::rollBack();
+
+            return json_fail("绑定失败");
         }
     }
 }

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

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

+ 86 - 0
app/admin/service/member/MemberService.php

@@ -742,6 +742,92 @@ class MemberService
         return json_success('', compact('rows', 'page', 'pageSize', 'total'));
     }
 
+    /**
+     * @Desc 储值卡账户明细
+     * @Author Gorden
+     * @Date 2024/11/19 11:48
+     *
+     * @param Request $request
+     * @return Response
+     */
+    public static function cardInfo(Request $request)
+    {
+        $memberId = $request->get('member_id', '');
+        $accountNbr = $request->get('account_nbr', '');
+        $page = $request->get('page', 1);
+        $pageSize = $request->get('pageSize', 20);
+
+        $account = MemberAccount::where('join_account_member_id', $memberId)
+            ->where('member_account_nbr', $accountNbr)
+            ->where('member_account_classify', 'CARD')
+            ->first();
+        if (!$account) {
+            return json_fail('暂无数据');
+        }
+        $balance = $account->member_account_surplus + $account->member_account_added;
+
+        $info = PayDetail::where('pay_prepayid', $accountNbr)
+            ->where('pay_status', 'SUCCESS')
+            ->orderByDesc('pay_addtimes')
+            ->get()
+            ->toArray();
+        $data = [];
+        foreach ($info as $key => $item) {
+            unset($item['pay_json_request']);
+            $categoryIds = [];
+            if (!empty($item['join_pay_order_id'])) {
+                $orderIds = Order::where('order_groupby', $item['join_pay_order_id'])->pluck('order_id');
+                $goodsIds = OrderSheet::whereIn('join_sheet_order_id', $orderIds)->pluck('join_sheet_goods_id');
+                $categoryIds = Goods::whereIn('goods_id', $goodsIds)->pluck('join_goods_category_id');
+            }
+
+
+            $categoryName = [];
+            foreach ($categoryIds as $id) {
+                $category = SysCategory::where('category_id', $id)->first();
+                if (!empty($category->category_super_path)) {
+                    $path = explode('#', $category->category_super_path);
+                    $ids = array_filter($path);
+                    $categoryName[] = SysCategory::where('category_id', current($ids))->value('category_name');
+                } else {
+                    $categoryName[] = $category->category_name;
+                }
+            }
+            $item['goods_category'] = implode(',', array_unique($categoryName));
+            if (in_array($item['pay_category'], ['RECHARGE','REFUND'])) {
+                $item['balance_type'] = 'add';
+            } else {
+                $item['balance_type'] = 'cut';
+            }
+            $item['balance'] = number_format($balance, 2, '.', '');
+            $balance = $balance + $item['pay_amount'];
+            $data[] = $item;
+        }
+
+        // 绑定记录
+        $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){
+            $data[] = [
+                'goods_category' => '',
+                'balance' => $item['member_account_list_amount'],
+                'pay_amount' => $item['member_account_list_amount'],
+                'pay_category' => 'BIND',
+                'balance_type' => 'add',
+                'pay_addtimes' => $item['member_account_list_addtimes'],
+            ];
+        }
+
+        $total = count($data);
+        $start = ($page - 1) * $pageSize;
+        $rows = array_slice($data, $start, $pageSize);
+
+        return json_success('', compact('rows', 'page', 'pageSize', 'total'));
+    }
+
     public static function welfareInfo(Request $request)
     {
         $memberId = $request->get('member_id', '');

+ 2 - 0
route/admin.php

@@ -777,6 +777,7 @@ Route::group('/admin', function () {
             Route::get('/my/{id:\w+}', [\app\admin\controller\member\AccountController::class, 'my']);
             Route::post('/incomeExpend', [\app\admin\controller\member\AccountController::class, 'incomeExpend']);
             Route::post('/updateStatus', [\app\admin\controller\member\AccountController::class, 'updateStatus']);
+            Route::post('/bindCard', [\app\admin\controller\member\AccountController::class, 'bindCard']);
             Route::get('/selectMemberAccount', [\app\admin\controller\member\AccountController::class, 'selectMemberAccount']);
         })->middleware([
             \app\middleware\AdminAuthCheck::class
@@ -798,6 +799,7 @@ Route::group('/admin', function () {
             Route::get('/welfareInfo', [\app\admin\controller\member\MemberController::class, 'welfareInfo']);
             Route::post('/clearWelfare', [\app\admin\controller\member\MemberController::class, 'clearWelfare']);
             Route::get('/vipInfo', [\app\admin\controller\member\MemberController::class, 'vipInfo']);
+            Route::get('/cardInfo', [\app\admin\controller\member\MemberController::class, 'cardInfo']);
             Route::get('/coupon', [\app\admin\controller\member\MemberController::class, 'coupon']);
             Route::get('/allCoupon', [\app\admin\controller\member\MemberController::class, 'allCoupon']);
             Route::get('/couponCount', [\app\admin\controller\member\MemberController::class, 'couponCount']);