Browse Source

会员充值统计

gorden 4 months ago
parent
commit
7b980a2db7

+ 59 - 0
app/admin/controller/finance/RechargeController.php

@@ -0,0 +1,59 @@
+<?php
+
+namespace app\admin\controller\finance;
+
+use app\admin\service\member\MemberService;
+use app\model\Member;
+use app\model\Order;
+use support\Db;
+use support\Request;
+
+class RechargeController
+{
+
+    public function list(Request $request)
+    {
+        $page = $request->get('page', 1);
+        $pageSize = $request->get('pageSize', 20);
+        $memberId = $request->get('join_order_member_id', '');
+        $days = $request->get('order_addtimes', []);
+        $premisesId = intval($request->get('premises_id', ''));
+        if (!empty($days)) {
+            $days[0] = strtotime($days[0]);
+            $days[1] = strtotime($days[1]);
+        }
+
+        $rows = Order::with([
+            'member' => function ($query) {
+                $query->select('member_id', 'member_mobile');
+            },
+            'cert' => function ($query) {
+                $query->select('join_cert_member_id', 'member_cert_name');
+            },
+        ])->where('order_classify','RECHARGE')
+            ->when(!empty($days), function ($query) use ($days) {
+            $query->whereBetween('order_addtimes', $days);
+        })->when(!empty($memberId), function ($query) use ($memberId) {
+            $query->where('join_order_member_id', $memberId);
+        });
+
+        $total = $rows->count();
+        $memberIds = $rows->pluck('join_order_member_id')->toArray();
+        dump(count(array_unique($memberIds)));
+        $statistics['member_count'] = count(array_unique($memberIds));
+        $statistics['amount'] = $rows->sum('order_amount_pay');
+
+        $rows = $rows->orderBy('order_addtimes', 'DESC')
+            ->forPage($page, $pageSize)
+            ->get()
+            ->toArray();
+
+        foreach ($rows as &$row){
+            $mobile = $row['member'] && $row['member']['member_mobile'] ? $row['member']['member_mobile'] : '';
+            $certName = $row['cert'] && $row['cert']['member_cert_name'] ? $row['cert']['member_cert_name'] : '';
+            $row['member_name'] = MemberService::getMemberCertName($mobile,$certName,'');
+        }
+
+        return json_success('', compact('rows', 'page', 'pageSize', 'total', 'statistics'));
+    }
+}

+ 3 - 1
app/admin/controller/notify/RechargeController.php

@@ -116,7 +116,9 @@ class RechargeController
             // 赠送比例
             $objectJson = json_decode($payDetail->join_pay_object_json, true);
             $goodsAttributeJson = [];
+            $couponParams = [];
             if (isset($objectJson['order_id'])) {
+                $couponParams['order_id'] = $objectJson['order_id'];
                 // 对应订单设置已完成
                 Order::where('order_groupby', $payDetail->join_pay_order_id)->update(['order_status_system' => 'DONE', 'order_is_complete' => 'Y', 'order_status_storage' => 'DONE']);
                 $goodsAttributeJson = RechargeService::getGoodsAttributeJson($objectJson['order_id']);
@@ -142,7 +144,7 @@ class RechargeController
             RechargeService::disposeRole($payDetail->join_pay_member_id, $payDetail->pay_amount);
 
             // 发券
-            RechargeService::disposeRoleCoupon($goodsAttributeJson, $payDetail->join_pay_member_id);
+            RechargeService::disposeRoleCoupon($goodsAttributeJson, $couponParams, $payDetail->join_pay_member_id);
 
             // 计算充值提成
             if (!empty($payDetail->join_pay_object_json)) {

+ 11 - 1
app/admin/controller/order/RechargeController.php

@@ -10,6 +10,7 @@ use app\controller\Curd;
 use app\model\Appointment;
 use app\model\ClientConfig;
 use app\model\Coupon;
+use app\model\CouponDetail;
 use app\model\Goods;
 use app\model\GoodsComponent;
 use app\model\GoodsRunning;
@@ -830,7 +831,16 @@ class RechargeController extends Curd
                             ->toArray();
                         foreach ($coupons as &$coupon) {
                             if (isset($goodsAttributeJson['coupon'][$coupon['coupon_id']])) {
-                                $coupon['num'] = $goodsAttributeJson['coupon'][$coupon['coupon_id']]['num'];
+                                $coupon['num'] = CouponDetail::where('join_detail_coupon_id',$coupon['coupon_id'])
+                                    ->where('join_coupon_detail_member_id',$order->join_order_member_id)
+                                    ->whereJsonContains('coupon_detail_extend_json->order_id',$order->order_id)
+                                    ->count();
+                                $coupon['used'] = CouponDetail::where('join_detail_coupon_id',$coupon['coupon_id'])
+                                    ->where('join_coupon_detail_member_id',$order->join_order_member_id)
+                                    ->whereJsonContains('coupon_detail_extend_json->order_id',$order->order_id)
+                                    ->where('coupon_detail_status','USED')
+                                    ->count();
+                                $coupon['unused'] = $coupon['num'] - $coupon['used'];
                             }
                         }
                     }

+ 5 - 4
app/admin/service/coupon/CouponDetailService.php

@@ -35,7 +35,7 @@ class CouponDetailService
                 'coupon_detail_gain_datetime' => $params['coupon_detail_gain_datetime'],
                 'coupon_detail_deadline_datetime' => $params['coupon_detail_deadline_datetime'],
                 'coupon_detail_period_num' => $params['coupon_detail_period_num'] ?? 0,
-                'coupon_detail_extend_json' => json_encode(['gettype' => $gettype]),
+                'coupon_detail_extend_json' => json_encode(['gettype' => $gettype, 'order_id' => $params['order_id'] ?? '']),
                 'coupon_detail_addtimes' => time(),
             ]);
         } catch (\Exception $e) {
@@ -57,7 +57,7 @@ class CouponDetailService
                     'join_coupon_detail_member_id' => $params['member_id'],
                     'coupon_detail_gain_datetime' => $params['coupon_detail_gain_datetime'],
                     'coupon_detail_deadline_datetime' => $params['coupon_detail_deadline_datetime'],
-                    'coupon_detail_extend_json' => json_encode(['gettype' => $gettype]),
+                    'coupon_detail_extend_json' => json_encode(['gettype' => $gettype, 'order_id' => $params['order_id'] ?? '']),
                     'coupon_detail_period_num' => $params['coupon_detail_period_num'] ?? 0,
                     'coupon_detail_status' => 'ACTIVED',
                     'coupon_detail_addtimes' => time()
@@ -98,6 +98,7 @@ class CouponDetailService
                 for ($i = 0; $i < $periodJson['nbr']; $i++) {
                     $periodParams = self::generatePeriod($periodJson);
                     $periodParams['gettype'] = $params['gettype'] ?? '';
+                    $periodParams['order_id'] = $params['order_id'] ?? '';
                     $periodParams['coupon_id'] = $params['coupon_id'];
                     $periodParams['member_id'] = $params['member_id'];
                     $periodParams['coupon_detail_period_num'] = $periodJson['now_nbr'];
@@ -145,7 +146,7 @@ class CouponDetailService
                     'join_coupon_detail_member_id' => $params['member_id'],
                     'coupon_detail_gain_datetime' => $params['coupon_detail_gain_datetime'],
                     'coupon_detail_deadline_datetime' => $params['coupon_detail_deadline_datetime'],
-                    'coupon_detail_extend_json' => json_encode(['gettype' => $gettype]),
+                    'coupon_detail_extend_json' => json_encode(['gettype' => $gettype, 'order_id' => $params['order_id'] ?? '']),
                     'coupon_detail_period_num' => $params['coupon_detail_period_num'] ?? 0,
                     'coupon_detail_status' => 'ACTIVED',
                     'coupon_detail_addtimes' => time()
@@ -180,7 +181,7 @@ class CouponDetailService
                 'coupon_detail_gain_datetime' => $params['coupon_detail_gain_datetime'],
                 'coupon_detail_deadline_datetime' => $params['coupon_detail_deadline_datetime'],
                 'coupon_detail_period_num' => $params['coupon_detail_period_num'] ?? 0,
-                'coupon_detail_extend_json' => json_encode(['gettype' => $gettype]),
+                'coupon_detail_extend_json' => json_encode(['gettype' => $gettype, 'order_id' => $params['order_id'] ?? '']),
                 'coupon_detail_addtimes' => time(),
             ]);
         } catch (\Exception $e) {

+ 3 - 2
app/admin/service/notify/RechargeService.php

@@ -128,7 +128,7 @@ class RechargeService
         }
     }
 
-    public static function disposeRoleCoupon($goodsAttributeJson, $memberId)
+    public static function disposeRoleCoupon($goodsAttributeJson,$couponParams, $memberId)
     {
         try {
             if (empty($goodsAttributeJson['coupon'])) {
@@ -148,7 +148,7 @@ class RechargeService
                 // 发周期券
                 if ($couponModel->coupon_is_period == 'Y') {
                     // 发券参数
-                    $couponSendParams = ['gettype' => 'ROLE', 'coupon_id' => $key, 'member_id' => $memberId];
+                    $couponSendParams = ['gettype' => 'ROLE', 'coupon_id' => $key, 'member_id' => $memberId,'order_id'=>$couponParams['order_id'] ?? ''];
                     Log::info("发周期券参数", $couponSendParams);
                     CouponDetailService::sendPeriodCoupon($couponSendParams);
                     continue;
@@ -175,6 +175,7 @@ class RechargeService
                     'member_id' => $memberId,
                     'coupon_detail_gain_datetime' => date('Y-m-d H:i:s'),
                     'coupon_detail_deadline_datetime' => $endDate,
+                    'order_id'=>$couponParams['order_id'] ?? ''
                 ];
 
                 Log::info("发普通券参数", $couponSendParams);

+ 14 - 13
app/admin/service/statistics/OrderService.php

@@ -18,25 +18,26 @@ class OrderService
         // 今日收入
 //        $couponDetails = Db::select("select * from app_coupon_detail where coupon_detail_deadline_datetime != '' AND CAST(UNIX_TIMESTAMP(coupon_detail_deadline_datetime) as SIGNED) < " . time());
 
-        $data['todayRevenue'] = PayDetail::whereRaw('CAST(UNIX_TIMESTAMP(pay_paytimes) as SIGNED) > ? ' , [$todayTimeUnix])
-            ->where('join_pay_order_id','<>','')
+        $data['todayRevenue'] = PayDetail::whereRaw('CAST(UNIX_TIMESTAMP(pay_paytimes) as SIGNED) > ? ', [$todayTimeUnix])
+            ->where('join_pay_order_id', '<>', '')
             ->where('pay_status', 'SUCCESS')
             ->where('pay_category', '<>', 'RETURN')
             ->where('pay_category', '<>', 'REFUND')
+            ->where('pay_category', '<>', 'ROLE_REFUND')
             ->where('pay_category', '<>', 'RECHARGE')
             ->where('pay_category', '<>', 'CLEAR')
             ->sum('pay_amount');
-        $refundAmount = PayDetail::whereRaw('CAST(UNIX_TIMESTAMP(pay_paytimes) as SIGNED) > ? ' , [$todayTimeUnix])
+        $refundAmount = PayDetail::whereRaw('CAST(UNIX_TIMESTAMP(pay_paytimes) as SIGNED) > ? ', [$todayTimeUnix])
             ->where('pay_status', 'SUCCESS')
-            ->where('pay_category', 'REFUND')
+            ->whereIn('pay_category', ['REFUND', 'ROLE_REFUND'])
             ->sum('pay_amount');
 //        $data['todayRevenue'] = $data['todayRevenue'] - $refundAmount;
-        $data['todayRevenue'] = round($data['todayRevenue'],2);
+        $data['todayRevenue'] = round($data['todayRevenue'], 2);
         // 今日充值额
         $data['todayRecharge'] = Order::where('order_status_payment', 'SUCCESS')
             ->where('order_addtimes', '>', $todayTimeUnix)
             ->where('order_category', 'RECHARGE')
-            ->where('order_status_payment','SUCCESS')
+            ->where('order_status_payment', 'SUCCESS')
             ->sum('order_amount_pay');
         // 今日退单
         $data['todayRefund'] = $refundAmount;
@@ -79,29 +80,29 @@ class OrderService
 
         sort($category);
 
-        foreach ($category as $item2){
+        foreach ($category as $item2) {
             $isHaveService = false;
             $isHaveGoods = false;
-            foreach ($newAdditionService as $item){
-                if ($item2 == $item->month){
+            foreach ($newAdditionService as $item) {
+                if ($item2 == $item->month) {
                     $isHaveService = true;
                     $newAdditionServiceData['category'][] = $item->month;
                     $newAdditionServiceData['data'][] = $item->num;
                 }
             }
-            foreach ($newAddition as $item3){
-                if ($item2 == $item3->month){
+            foreach ($newAddition as $item3) {
+                if ($item2 == $item3->month) {
                     $isHaveGoods = true;
                     $newAdditionData['category'][] = $item3->month;
                     $newAdditionData['data'][] = $item3->num;
                 }
             }
-            if (!$isHaveService){
+            if (!$isHaveService) {
                 $newAdditionServiceData['category'][] = $item2;//['month'=>$item2,'num'=>0];
                 $newAdditionServiceData['data'][] = 0;
             }
 
-            if (!$isHaveGoods){
+            if (!$isHaveGoods) {
                 $newAdditionData['category'][] = $item2;//['month'=>$item2,'num'=>0];
                 $newAdditionData['data'][] = 0;
             }

+ 6 - 0
route/admin.php

@@ -180,6 +180,12 @@ Route::group('/admin', function () {
         })->middleware([
             \app\middleware\AdminAuthCheck::class
         ]);
+        /* 充值管理 */
+        Route::group('/recharge', function () {
+            Route::get('/list', [\app\admin\controller\finance\RechargeController::class, 'list']);
+        })->middleware([
+            \app\middleware\AdminAuthCheck::class
+        ]);
     });
     /* 系统管理中心 */
     Route::group('/sys', function () {