Browse Source

会员分析

gorden 4 months ago
parent
commit
43f4ee777d
1 changed files with 161 additions and 3 deletions
  1. 161 3
      app/admin/controller/statistics/MemberController.php

+ 161 - 3
app/admin/controller/statistics/MemberController.php

@@ -3,6 +3,9 @@
 namespace app\admin\controller\statistics;
 
 use app\model\Member;
+use app\model\MemberCert;
+use app\model\MemberRole;
+use app\model\PayDetail;
 use support\Db;
 
 class MemberController
@@ -10,7 +13,7 @@ class MemberController
     public function index()
     {
         // 会员数量
-        $memberCount = Member::where('member_is_owner', 'N')->where('member_mobile','<>','0000')->count();
+        $memberCount = Member::where('member_is_owner', 'N')->where('member_mobile', '<>', '0000')->count();
         // 业主数量
         $ownerCount = Member::where('member_is_owner', 'Y')->count();
         // 用户总数
@@ -30,12 +33,14 @@ class MemberController
                     SELECT DATE_FORMAT(FROM_UNIXTIME(member_addtimes), '%Y/%m') AS month,
                     COUNT(member_id) AS member_count
                     FROM app_member
+                    WHERE member_mobile != '0000'
                     GROUP BY month
                 ) t1
                 JOIN (
                     SELECT DATE_FORMAT(FROM_UNIXTIME(member_addtimes), '%Y/%m') AS month,
                     COUNT(member_id) AS member_count
                     FROM app_member
+                    WHERE member_mobile != '0000'
                     GROUP BY month
                 ) t2 ON t1.month >= t2.month
                 GROUP BY t1.month;
@@ -71,7 +76,7 @@ class MemberController
         foreach ($newAdditionBing as $item) {
             if ($item->age_group == '0') {
                 $item->age_group = '未知';
-            }elseif ($item->age_group == '39'){
+            } elseif ($item->age_group == '39') {
                 $item->age_group = '40以下';
             }
             $newAdditionBingData[] = [
@@ -79,7 +84,155 @@ class MemberController
                 'value' => $item->number_of_people
             ];
         }
+        // 认证数
+        $authCount = MemberCert::where('member_cert_nbr', '<>', '')->count();
+        $unAuthCount = $memberCount - $authCount;
+        $authBingData = [
+            [
+                'name' => '已认证',
+                'value' => $authCount
+            ],
+            [
+                'name' => '未认证',
+                'value' => $unAuthCount
+            ]
+        ];
+        // 各身份数量
+        $memberIdentityBingData = [];
+        $basicMemberCount = $memberCount;
+        // 1.等级
+        $memberRoles = MemberRole::select('member_role_id', 'member_role_name')->get()->toArray();
+        foreach ($memberRoles as $role) {
+            $memberRoleCount = Member::where('join_member_role_id', $role['member_role_id'])->count();
+            if ($memberRoleCount < 1) {
+                continue;
+            }
+            $basicMemberCount -= $memberRoleCount;
 
+            $isHave = false;
+            foreach ($memberIdentityBingData as $key => $item) {
+                if ($item['name'] == $role['member_role_name']) {
+                    $isHave = true;
+                    $memberIdentityBingData[$key]['value'] += $memberRoleCount;
+                }
+            }
+            if (!$isHave) {
+                $memberIdentityBingData[] = [
+                    'name' => $role['member_role_name'],
+                    'value' => $memberRoleCount
+                ];
+            }
+        }
+        // 2.康养城会员
+        $vipCount = Member::where('member_is_vip', 'Y')->count();
+        $basicMemberCount -= $vipCount;
+        $memberIdentityBingData[] = [
+            'name' => '康养城VIP',
+            'value' => $vipCount
+        ];
+        // 3.会员合伙人
+        $partnerCount = Member::where('member_is_partner', 'Y')->count();
+        $basicMemberCount -= $partnerCount;
+        $memberIdentityBingData[] = [
+            'name' => '会员合伙人',
+            'value' => $partnerCount
+        ];
+        // 4.康养推荐官
+        $referrerCount = Member::where('member_is_referrer', 'Y')->count();
+        $basicMemberCount -= $referrerCount;
+        $memberIdentityBingData[] = [
+            'name' => '康养推荐官',
+            'value' => $referrerCount
+        ];
+        // 5.加盟合伙人
+        $franchiseeCount = Member::where('member_is_franchisee', 'Y')->count();
+        $basicMemberCount -= $franchiseeCount;
+        $memberIdentityBingData[] = [
+            'name' => '加盟合伙人',
+            'value' => $franchiseeCount
+        ];
+        $memberIdentityAllBingData = $memberIdentityBingData;
+        $memberIdentityAllBingData[] = [
+            'name' => '普通会员',
+            'value' => $basicMemberCount
+        ];
+
+        // 消费账户占比
+        $memberConsumptionBingData = [
+            ['name' => '未消费', 'value' => 0],
+            ['name' => '1-500', 'value' => 0],
+            ['name' => '501-1000', 'value' => 0],
+            ['name' => '1001-5000', 'value' => 0],
+            ['name' => '5001-10000', 'value' => 0],
+            ['name' => '10001-50000', 'value' => 0],
+            ['name' => '50000以上', 'value' => 0],
+        ];
+        $memberConsumptionCount = $memberCount;
+        // 散客ID
+        $sankeMemberId = Member::where('member_mobile', '0000')->value('member_id');
+        $payDetails = PayDetail::selectRaw('SUM(pay_amount) as amount,join_pay_member_id')
+            ->where('pay_amount', '>', 0)
+            ->where('pay_status', 'SUCCESS')
+            ->where('join_pay_member_id', '<>', $sankeMemberId)
+            ->whereIn('pay_category', ['GOODS', 'SERVICE', 'CHNMED', 'CHNNCD', 'MEALS', 'PACKAGE'])
+            ->groupBy('join_pay_member_id')
+            ->get()
+            ->toArray();
+        foreach ($payDetails as $detail) {
+            $memberConsumptionCount -= 1;
+            if ($detail['amount'] >= 1 && $detail['amount'] <= 500 && isset($memberConsumptionBingData[1])) {
+                $memberConsumptionBingData[1]['value'] += 1;
+            } elseif ($detail['amount'] >= 501 && $detail['amount'] <= 1000 && isset($memberConsumptionBingData[2])) {
+                $memberConsumptionBingData[2]['value'] += 1;
+            } elseif ($detail['amount'] >= 1001 && $detail['amount'] <= 5000 && isset($memberConsumptionBingData[3])) {
+                $memberConsumptionBingData[3]['value'] += 1;
+            } elseif ($detail['amount'] >= 5001 && $detail['amount'] <= 10000 && isset($memberConsumptionBingData[4])) {
+                $memberConsumptionBingData[4]['value'] += 1;
+            } elseif ($detail['amount'] >= 10001 && $detail['amount'] <= 50000 && isset($memberConsumptionBingData[5])) {
+                $memberConsumptionBingData[5]['value'] += 1;
+            } elseif ($detail['amount'] >= 50001 && isset($memberConsumptionBingData[6])) {
+                $memberConsumptionBingData[6]['value'] += 1;
+            }
+        }
+        if ($memberConsumptionBingData[6]['value'] == 0) {
+            unset($memberConsumptionBingData[6]);
+        }
+        $memberConsumptionBingData[0]['value'] = $memberConsumptionCount;
+
+        // 充值
+        $rechargeBingData = [];
+        $rechargePaydetail = PayDetail::whereIn('pay_category', ['FRANCHISEE', 'RECHARGE', 'REFERRER', 'PARTNER', 'COMBINE'])
+            ->where('pay_status', 'SUCCESS')
+            ->where('join_pay_order_id', 'like', '%OD%');
+        $recharge1Model = clone $rechargePaydetail;
+        $rechargeBingData[] = [
+            'name' => '1-1000',
+            'value' => $recharge1Model->whereBetween('pay_amount', [1, 1000])->count()
+        ];
+
+        $recharge1Model = clone $rechargePaydetail;
+        $rechargeBingData[] = [
+            'name' => '1001-5000',
+            'value' => $recharge1Model->whereBetween('pay_amount', [1001, 5000])->count()
+        ];
+
+        $recharge1Model = clone $rechargePaydetail;
+        $rechargeBingData[] = [
+            'name' => '5001-10000',
+            'value' => $recharge1Model->whereBetween('pay_amount', [5001, 10000])->count()
+        ];
+
+        $recharge1Model = clone $rechargePaydetail;
+        $rechargeBingData[] = [
+            'name' => '10001-50000',
+            'value' => $recharge1Model->whereBetween('pay_amount', [10001, 50000])->count()
+        ];
+
+        $recharge1Model = clone $rechargePaydetail;
+        $rechargeBingData[] = [
+            'name' => '50000以上',
+            'value' => $recharge1Model->where('pay_amount', '>', 50000)->count()
+        ];
 
         $data = [
             'memberCount' => $memberCount,
@@ -88,7 +241,12 @@ class MemberController
             'todayCount' => $todayCount,
             'monthCount' => $monthCount,
             'newAdditionData' => $newAdditionData,
-            'newAdditionBingData' => $newAdditionBingData
+            'newAdditionBingData' => $newAdditionBingData,
+            'authBingData' => $authBingData,
+            'memberIdentityInfoBingData' => $memberIdentityBingData,
+            'memberIdentityAllBingData' => $memberIdentityAllBingData,
+            'memberConsumptionBingData' => $memberConsumptionBingData,
+            'rechargeBingData' => $rechargeBingData
         ];
 
         return json_success('', $data);