| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257 | 
							- <?php
 
- 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
 
- {
 
-     public function index()
 
-     {
 
-         // 会员数量
 
-         $memberCount = Member::where('member_is_owner', 'N')->where('member_mobile', '<>', '0000')->count();
 
-         // 业主数量
 
-         $ownerCount = Member::where('member_is_owner', 'Y')->count();
 
-         // 用户总数
 
-         $userCount = $memberCount + $ownerCount;
 
-         // 今日新增用户数
 
-         $todayTime = strtotime(date('Y-m-d 00:00:00'));
 
-         $todayCount = Member::where('member_addtimes', '>', $todayTime)->where('member_is_owner', 'N')->count();
 
-         // 本月新增用户数
 
-         $monthTime = strtotime(date('Y-m-01 00:00:00'));
 
-         $monthCount = Member::where('member_addtimes', '>', $monthTime)->where('member_is_owner', 'N')->count();
 
-         // 折线图
 
-         $newAddition = Db::select("
 
-                 SELECT t1.month, t1.member_count,
 
-                 SUM(t2.member_count) AS member_month_count
 
-                 FROM (
 
-                     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
 
-                     ORDER BY month ASC 
 
-                 ) 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
 
-                     ORDER BY month ASC 
 
-                 ) t2 ON t1.month >= t2.month
 
-                 GROUP BY t1.month;
 
-         ");
 
-         dump($newAddition);
 
-         $newAdditionData = [];
 
-         foreach ($newAddition as $item) {
 
-             $newAdditionData['category'][] = $item->month;
 
-             $newAdditionData['data'][] = $item->member_count;
 
-             $newAdditionData['month_total'][] = $item->member_month_count;
 
-         }
 
-         // 饼图
 
-         $newAdditionBing = Db::select("
 
-             SELECT CASE
 
-                 WHEN TIMESTAMPDIFF(YEAR, member_cert_birth, CURDATE()) BETWEEN 0 AND 1 THEN '0'
 
-                 WHEN TIMESTAMPDIFF(YEAR, member_cert_birth, CURDATE()) BETWEEN 1 AND 39 THEN '39'
 
-                 WHEN TIMESTAMPDIFF(YEAR, member_cert_birth, CURDATE()) BETWEEN 40 AND 50 THEN '40-50'
 
-                 WHEN TIMESTAMPDIFF(YEAR, member_cert_birth, CURDATE()) BETWEEN 51 AND 60 THEN '51-60'
 
-                 WHEN TIMESTAMPDIFF(YEAR, member_cert_birth, CURDATE()) BETWEEN 61 AND 70 THEN '60-70'
 
-                 WHEN TIMESTAMPDIFF(YEAR, member_cert_birth, CURDATE()) BETWEEN 71 AND 80 THEN '70-80'
 
-                 ELSE '81以上'
 
-               END AS age_group,
 
-               COUNT(*) AS number_of_people
 
-             FROM
 
-               app_member_cert
 
-             WHERE member_cert_birth != ''
 
-             GROUP BY
 
-               age_group
 
-             ORDER BY
 
-               age_group;
 
-         ");
 
-         $newAdditionBingData = [];
 
-         foreach ($newAdditionBing as $item) {
 
-             if ($item->age_group == '0') {
 
-                 $item->age_group = '未知';
 
-             } elseif ($item->age_group == '39') {
 
-                 $item->age_group = '40以下';
 
-             }
 
-             $newAdditionBingData[] = [
 
-                 'name' => $item->age_group,
 
-                 '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,
 
-             'ownerCount' => $ownerCount,
 
-             'userCount' => $userCount,
 
-             'todayCount' => $todayCount,
 
-             'monthCount' => $monthCount,
 
-             'newAdditionData' => $newAdditionData,
 
-             'newAdditionBingData' => $newAdditionBingData,
 
-             'authBingData' => $authBingData,
 
-             'memberIdentityInfoBingData' => $memberIdentityBingData,
 
-             'memberIdentityAllBingData' => $memberIdentityAllBingData,
 
-             'memberConsumptionBingData' => $memberConsumptionBingData,
 
-             'rechargeBingData' => $rechargeBingData
 
-         ];
 
-         return json_success('', $data);
 
-     }
 
- }
 
 
  |