gorden il y a 5 mois
Parent
commit
d7ed11b1fd

+ 55 - 0
app/admin/controller/coupon/CouponController.php

@@ -169,6 +169,61 @@ class CouponController extends Curd
         return $items;
     }
 
+    /**
+     * @Desc 优惠券顶部统计
+     * @Author Gorden
+     * @Date 2024/10/31 16:36
+     *
+     * @param Request $request
+     * @return Response
+     */
+    public function statistics(Request $request)
+    {
+        $coupons = Coupon::selectRaw('coupon_classify,count(coupon_id) as total')
+            ->where('coupon_status', 'ACTIVED')
+            ->groupBy('coupon_classify')
+            ->get()
+            ->toArray();
+        $statistics = [];
+        $statistics['total'] = 0;
+        foreach ($coupons as $coupon) {
+            $statistics['total'] += $coupon['total'];
+            if ($coupon['coupon_classify'] == '季卡') {
+                $statistics['jika'] = $coupon['total'];
+            } else if ($coupon['coupon_classify'] == '年卡') {
+                $statistics['nianka'] = $coupon['total'];
+            } else if ($coupon['coupon_classify'] == '折扣券') {
+                $statistics['zhekou'] = $coupon['total'];
+            } else if ($coupon['coupon_classify'] == '折扣券') {
+                $statistics['dikou'] = $coupon['total'];
+            } else if ($coupon['coupon_classify'] == '月卡') {
+                $statistics['yueka'] = $coupon['total'];
+            } else if ($coupon['coupon_classify'] == '满减券') {
+                $statistics['manjian'] = $coupon['total'];
+            } else if ($coupon['coupon_classify'] == '福利券') {
+                $statistics['fuli'] = $coupon['total'];
+            } else if ($coupon['coupon_classify'] == '立减券') {
+                $statistics['lijian'] = $coupon['total'];
+            } else if ($coupon['coupon_classify'] == '赠品券') {
+                $statistics['zengpin'] = $coupon['total'];
+            }
+        }
+
+        // 领完的券
+        $couponNumbers = Coupon::where('coupon_number', '>', 0)
+            ->select('coupon_id', 'coupon_number')
+            ->get()
+            ->toArray();
+        $statistics['done'] = 0;
+        foreach ($couponNumbers as $item) {
+            if (CouponDetail::where('join_detail_coupon_id', $item['coupon_id'])->whereIn('coupon_detail_status', ['IN', 'PENDING'])->count('join_detail_coupon_id') >= $item['coupon_number']) {
+                $statistics['done'] += 1;
+            }
+        }
+
+        return json_success('success', $statistics);
+    }
+
     public function selectList()
     {
         $coupons = Coupon::where('coupon_status', 'ACTIVED')

+ 11 - 2
app/admin/controller/coupon/CouponDetailController.php

@@ -42,12 +42,13 @@ class CouponDetailController extends Curd
             $where['coupon_detail_addtimes'] = $addTimes;
         }
 
-        $query = $this->doSelect($where, $field, $order);
+        $query = $this->doSelect($where, $field, $order, $request);
         return $this->doFormat($query, $format, $limit);
     }
 
     protected function doSelect(array $where, string $field = null, string $order = 'desc')
     {
+        $request = \request();
         $model = $this->model->with([
             'detail' => function ($query) {
                 $query->select('join_detail_coupon_id', 'coupon_detail_status', 'coupon_detail_gain_datetime', 'coupon_detail_used_datetime', 'coupon_detail_remark');
@@ -63,6 +64,14 @@ class CouponDetailController extends Curd
                 $query->select('join_info_member_id', 'member_info_nickname');
             }
         ]);
+        if (!empty($request->get('coupon_classify'))) {
+            $model = $model->leftJoin('coupon', 'coupon.coupon_id', '=', 'coupon_detail.join_detail_coupon_id')
+                ->select('coupon.coupon_classify', 'coupon_detail.*')
+                ->where('coupon_classify', $request->get('coupon_classify'));
+        }
+        if (!empty($request->get('get_type'))) {
+            $model = $model->whereJsonContains("coupon_detail_extend_json->gettype", $request->get('get_type'));
+        }
         foreach ($where as $column => $value) {
             if (is_array($value)) {
                 if ($value[0] === 'like' || $value[0] === 'not like') {
@@ -185,7 +194,7 @@ class CouponDetailController extends Curd
         }
 
         $detail = CouponDetail::where('coupon_detail_id', $detailId)
-            ->select('coupon_detail_id', 'coupon_detail_extend_json','join_coupon_detail_member_id')
+            ->select('coupon_detail_id', 'coupon_detail_extend_json', 'join_coupon_detail_member_id')
             ->first();
         if (!empty($detail->coupon_detail_extend_json)) {
             $couponDetailExtendJson = json_decode($detail->coupon_detail_extend_json, true);

+ 45 - 0
app/admin/controller/finance/CommissionListController.php

@@ -111,6 +111,51 @@ class CommissionListController extends Curd
         return $items;
     }
 
+    /**
+     * @Desc 佣金管理顶部统计
+     * @Author Gorden
+     * @Date 2024/10/31 15:33
+     *
+     * @param Request $request
+     * @return Response
+     */
+    public function statistics(Request $request)
+    {
+        $todayTimeUnixStart = strtotime(date('Y-m-d'));
+        $todayTimeUnixEnd = strtotime(date('Y-m-d 23:59:59'));
+        $yesterdayStart = strtotime(date('Y-m-d', strtotime("-1 days")));
+        $yesterdayEnd = strtotime(date('Y-m-d 23:59:59', strtotime("-1 days")));
+        $monthStart = strtotime(date('Y-m-01'));
+        $monthEnd = strtotime(date('Y-m-t 23:59:59'));
+
+        $commissionModel = MemberAccountList::where('member_account_list_attr', 'IN')
+            ->where('member_account_list_status','ACTIVED')
+            ->selectRaw("SUM(member_account_list_amount) as amount, COUNT(member_account_list_id) as total");
+
+        $totalModel = clone $commissionModel;
+        $total = $totalModel->first()->toArray();
+
+        $todayTotalModel = clone $commissionModel;
+        $todayTotal = $todayTotalModel->whereBetween('member_account_list_addtimes', [$todayTimeUnixStart, $todayTimeUnixEnd])
+            ->first()
+            ->toArray();
+        $yesterdayTotalModel = clone $commissionModel;
+        $yesterdayTotal = $yesterdayTotalModel->whereBetween('member_account_list_addtimes', [$yesterdayStart, $yesterdayEnd])
+            ->first()
+            ->toArray();
+        $monthTotalModel = clone $commissionModel;
+        $monthTotal = $monthTotalModel->whereBetween('member_account_list_addtimes', [$monthStart, $monthEnd])
+            ->first()
+            ->toArray();
+
+        return json_success('success', [
+            'total' => $total,
+            'todayTotal' => $todayTotal,
+            'yesterdayTotal' => $yesterdayTotal,
+            'monthTotal' => $monthTotal
+        ]);
+    }
+
     /**
      * @Desc 记录详情
      * @Author Gorden

+ 93 - 8
app/admin/controller/order/PayDetailController.php

@@ -47,7 +47,15 @@ class PayDetailController extends Curd
             $where['pay_addtimes'][1] = !empty($where['pay_addtimes'][1]) ? strtotime($where['pay_addtimes'][1]) : '';
         }
         if (!empty($request->get('premises_id'))) {
-            $payIds = PayDetail::whereJsonContains('pay_extend_json->remark->premises_id', intval($request->get('premises_id')))
+            $orderIds = Order::whereJsonContains('order_extend_json->dept_id', intval($request->get('premises_id')))
+                ->whereIn('order_classify', ['RECHARGE', 'COMBINE', 'PARTNER', 'RECHARGE'])
+                ->where('order_status_payment', 'SUCCESS')
+                ->orWhereJsonContains('order_extend_json->referee_dept_id', intval($request->get('premises_id')))
+                ->pluck('order_id')
+                ->toArray();
+            $orderIdsStr = "'" . implode("','", $orderIds) . "'";
+            $payIds = PayDetail::whereRaw("JSON_UNQUOTE(JSON_EXTRACT(join_pay_object_json,'$.order_id')) in ({$orderIdsStr})")
+                ->orWhereRaw("JSON_UNQUOTE(JSON_EXTRACT(join_pay_object_json,'$.recharge_order_id')) in ({$orderIdsStr})")
                 ->pluck('pay_id')
                 ->toArray();
             $where['pay_id'] = '';
@@ -55,12 +63,6 @@ class PayDetailController extends Curd
                 $where['pay_id'] = ['in', $payIds];
             }
         }
-
-        // else if ($where['pay_category'] == 'RECHARGE') {
-        //     $where['pay_status'] = 'SUCCESS';
-        //     $where['pay_category'] = 'RECHARGE';
-        //     $where['pay_prepayid'] = ['in','WXPAY,ALIPAY'];
-        // }
         $query = $this->doSelect($where, $field, $order, $request->get());
         return $this->doFormat($query, $format, $limit);
     }
@@ -288,6 +290,89 @@ class PayDetailController extends Curd
         return $items;
     }
 
+    public function statistics(Request $request)
+    {
+        $type = $request->get('type');
+        $orderType = $request->get('order_type');
+        $premisesId = $request->get('premises_id');
+        $memberId = $request->get('join_pay_member_id');
+        $payAddtimes = $request->get('pay_addtimes');
+
+        if (!empty($payAddtimes)) {
+            $payAddtimes[0] = strtotime($payAddtimes[0]);
+            $payAddtimes[1] = strtotime($payAddtimes[1]);
+        }
+
+        $payDetailModel = PayDetail::where('pay_status', 'SUCCESS')
+            ->where('pay_category', 'RECHARGE')
+            ->select(Db::raw("SUM(CASE WHEN join_pay_order_id='COMBINE' THEN 1000 ELSE pay_amount END) as amount, COUNT(pay_id) as total"));
+//            ->when(!empty($type), function ($query) use ($type) {
+//                if ($type == 'NORMAL') {
+//                    $query->whereIn('pay_prepayid', ['ALIPAY', 'WXPAY', 'OFFLINE_WXPAY', 'OFFLINE_ALIPAY', 'MONEY'])
+//                        ->orWhere('pay_prepayid', 'like', '%CASH%');
+//                } else if ($type == 'VIP') {
+//                    $query->where('pay_category', 'VIP');
+//                } else {
+//                    $query->where('pay_prepayid', 'like', '%WELFARE%');
+//                }
+//            })->when(!empty($orderType), function ($query) use ($orderType) {
+//                if (in_array($orderType, ['COMBINE', 'PARTNER'])) {
+//                    $query->where('join_pay_order_id', $orderType);
+//                } elseif ($orderType == 'VIP') {
+//                    $query->where('pay_category', 'VIP');
+//                } elseif ($orderType == 'RECHARGE') {
+//                    $query->where('join_pay_order_id', '<>', 'PARTNER')
+//                        ->where('join_pay_order_id', '<>', 'COMBINE')
+//                        ->where('pay_category', '<>', 'VIP');
+//                }
+//            })->when(!empty($premisesId), function ($query) use ($premisesId) {
+//                $orderIds = Order::whereJsonContains('order_extend_json->dept_id', intval($premisesId))
+//                    ->whereIn('order_classify', ['RECHARGE', 'COMBINE', 'PARTNER', 'RECHARGE'])
+//                    ->where('order_status_payment', 'SUCCESS')
+//                    ->orWhereJsonContains('order_extend_json->referee_dept_id', intval($premisesId))
+//                    ->pluck('order_id')
+//                    ->toArray();
+//                $orderIdsStr = "'" . implode("','", $orderIds) . "'";
+//                $payIds = PayDetail::whereRaw("JSON_UNQUOTE(JSON_EXTRACT(join_pay_object_json,'$.order_id')) in ({$orderIdsStr})")
+//                    ->orWhereRaw("JSON_UNQUOTE(JSON_EXTRACT(join_pay_object_json,'$.recharge_order_id')) in ({$orderIdsStr})")
+//                    ->pluck('pay_id')
+//                    ->toArray();
+//                $query->whereIn('pay_id', $payIds);
+//            })->when(!empty($memberId), function ($query) use ($memberId) {
+//                $query->where('join_pay_member_id', $memberId);
+//            })->when(!empty($payAddtimes),function ($query) use ($payAddtimes){
+//                $query->whereBetween('pay_addtimes',$payAddtimes);
+//            });
+        $totalModel = clone $payDetailModel;
+        $total = $totalModel->first()->toArray();
+        $todayUnixStart = strtotime(date('Y-m-d'));
+        $todayUnixEnd = strtotime(date('Y-m-d 23:59:59'));
+        $todayTotalModel = clone $payDetailModel;
+        $todayTotal = $todayTotalModel->whereBetween('pay_addtimes', [$todayUnixStart, $todayUnixEnd])
+            ->first()
+            ->toArray();
+
+        $yesterdayStart = strtotime(date('Y-m-d', strtotime("-1 days")));
+        $yesterdayEnd = strtotime(date('Y-m-d 23:59:59', strtotime("-1 days")));
+        $yesterdayTotalModel = clone $payDetailModel;
+        $yesterdayTotal = $yesterdayTotalModel->whereBetween('pay_addtimes', [$yesterdayStart, $yesterdayEnd])
+            ->first()
+            ->toArray();
+        $monthStart = strtotime(date('Y-m-01'));
+        $monthEnd = strtotime(date('Y-m-t 23:59:59'));
+        $monthTotalModel = clone $payDetailModel;
+        $monthTotal = $monthTotalModel->whereBetween('pay_addtimes', [$monthStart, $monthEnd])
+            ->first()
+            ->toArray();
+
+        return json_success('success', [
+            'total' => $total,
+            'todayTotal' => $todayTotal,
+            'yesterdayTotal' => $yesterdayTotal,
+            'monthTotal' => $monthTotal
+        ]);
+    }
+
     /**
      * @Desc 产品订单
      * @Author Gorden
@@ -376,7 +461,7 @@ class PayDetailController extends Curd
                     if ($detail['join_pay_order_id'] == 'PARTNER') {
                         $order['added_amount'] = sprintf('%.2f', $payObjectJson['recharge_config']['nbr']);
                     } else {
-                        $order['added_amount'] = sprintf('%.2f', round($detail['pay_amount'] * $payObjectJson['recharge_config']['nbr'],2));
+                        $order['added_amount'] = sprintf('%.2f', round($detail['pay_amount'] * $payObjectJson['recharge_config']['nbr'], 2));
                     }
 //                    $order['added_amount'] = sprintf('%.2f',round($detail['pay_amount'] * $payObjectJson['recharge_config']['nbr'], 2));
                 }

+ 3 - 0
route/admin.php

@@ -168,6 +168,7 @@ Route::group('/admin', function () {
         /* 提成管理 */
         Route::group('/commissionList', function () {
             Route::get('/list', [\app\admin\controller\finance\CommissionListController::class, 'select']);
+            Route::get('/statistics', [\app\admin\controller\finance\CommissionListController::class, 'statistics']);
             Route::get('/info', [\app\admin\controller\finance\CommissionListController::class, 'info']);
         })->middleware([
             \app\middleware\AdminAuthCheck::class
@@ -992,6 +993,7 @@ Route::group('/admin', function () {
     Route::group('/coupon', function () {
         Route::group('', function () {
             Route::get('/list', [\app\admin\controller\coupon\CouponController::class, 'select']);
+            Route::get('/statistics', [\app\admin\controller\coupon\CouponController::class, 'statistics']);
             Route::get('/selectList', [\app\admin\controller\coupon\CouponController::class, 'selectList']);
             Route::get('/info', [\app\admin\controller\coupon\CouponController::class, 'info']);
             Route::post('/add', [\app\admin\controller\coupon\CouponController::class, 'insert']);
@@ -1202,6 +1204,7 @@ Route::group('/admin', function () {
         // 支付记录
         Route::group('/payDetail', function () {
             Route::get('/list', [\app\admin\controller\order\PayDetailController::class, 'select']);
+            Route::get('/statistics', [\app\admin\controller\order\PayDetailController::class, 'statistics']);
             Route::get('/welfareList', [\app\admin\controller\order\PayDetailController::class, 'selectWelfare']);
             Route::get('/goodsOrder', [\app\admin\controller\order\PayDetailController::class, 'goodsOrder']);
             Route::post('/insertRecharge', [\app\admin\controller\order\PayDetailController::class, 'insertRecharge']);