$trade_no])->first(); } //查询 static function search($params = [], $is_all = false) { // \Log::info('search:'.json_encode($params)); $search_obj = self::orderBy('id', 'desc')->select(['orders.*', 'activity.name'])->leftjoin('activity', 'activity.id', '=', 'orders.activity_id'); if (isset($params['distribution_channel_id']) && $params['distribution_channel_id']) $search_obj->where('orders.distribution_channel_id', $params['distribution_channel_id']); if (isset($params['begin_time']) && $params['begin_time']) $search_obj->where('orders.created_at', '>=', $params['begin_time']); if (isset($params['end_time']) && $params['end_time']) $search_obj->where('orders.created_at', '<=', $params['end_time'] . ' 23:59:59'); if (isset($params['uid']) && $params['uid']) $search_obj->where('uid', $params['uid']); if (isset($params['inner_send_order_id']) && $params['inner_send_order_id']) $search_obj->where('inner_send_order_id', $params['inner_send_order_id']); if (isset($params['send_order_id']) && $params['send_order_id']) $search_obj->where('send_order_id', $params['send_order_id']); if (isset($params['activity_id']) && $params['activity_id']) $search_obj->where('activity_id', $params['activity_id']); if (isset($params['trade_no']) && $params['trade_no']) $search_obj->where('trade_no', $params['trade_no']); if (isset($params['transaction_id']) && $params['transaction_id']) $search_obj->where('transaction_id', $params['transaction_id']); if (isset($params['status']) && $params['status']) $search_obj->where('status', $params['status']); if (isset($params['activity_id']) && count($params['activity_id']) > 0) $search_obj->whereIn('activity_id', $params['activity_id']); if (isset($params['from_type']) && $params['from_type']) $search_obj->where('from_type', $params['from_type']); /*\Log::info('filter_:'.json_encode($params)); \Log::info(json_encode($search_obj)); \Log::info('my_sql:'.($search_obj->toSql()));*/ // \Log::info('my_sql:'.($search_obj->toSql())); if (isset($params['created_at']) && $params['created_at']) { \Log::info('created_at--:' . date('Y-m-d 00:00:00', strtotime($params['created_at']))); $search_obj->whereBetween('orders.created_at', [date('Y-m-d 00:00:00', strtotime($params['created_at'])), date('Y-m-d 23:59:59', strtotime($params['created_at']))]); } if ($is_all) { return $search_obj->get(); } else { return $search_obj->paginate(); } } //查询对象 static function searchObj($params = []) { $search_obj = self::orderBy('id', 'desc')->select(['orders.*', 'activity.name'])->leftjoin('activity', 'activity.id', '=', 'orders.activity_id'); if (isset($params['distribution_channel_id']) && $params['distribution_channel_id']) $search_obj->where('distribution_channel_id', $params['distribution_channel_id']); if (isset($params['begin_time']) && $params['begin_time']) $search_obj->where('orders.created_at', '>=', $params['begin_time']); if (isset($params['end_time']) && $params['end_time']) $search_obj->where('orders.created_at', '<=', $params['end_time'] . ' 23:59:59'); if (isset($params['uid']) && $params['uid']) $search_obj->where('uid', $params['uid']); if (isset($params['send_order_id']) && $params['send_order_id']) $search_obj->where('send_order_id', $params['send_order_id']); if (isset($params['activity_id']) && $params['activity_id']) $search_obj->where('activity_id', $params['activity_id']); if (isset($params['trade_no']) && $params['trade_no']) $search_obj->where('trade_no', $params['trade_no']); if (isset($params['transaction_id']) && $params['transaction_id']) $search_obj->where('transaction_id', $params['transaction_id']); if (isset($params['status']) && $params['status']) $search_obj->where('status', $params['status']); if (isset($params['activity_id']) && count($params['activity_id']) > 0) $search_obj->whereIn('activity_id', $params['activity_id']); return $search_obj; } //总额统计 static function getAmount($params = []) { $search_obj = self::where('status', 'PAID'); if (isset($params['distribution_channel_id']) && $params['distribution_channel_id']) $search_obj->where('distribution_channel_id', $params['distribution_channel_id']); if (isset($params['begin_time']) && $params['begin_time']) $search_obj->where('created_at', '>=', $params['begin_time']); if (isset($params['end_time']) && $params['end_time']) $search_obj->where('created_at', '<=', $params['end_time']); if (isset($params['uid']) && $params['uid']) $search_obj->where('uid', $params['uid']); if (isset($params['send_order_id']) && $params['send_order_id']) $search_obj->where('send_order_id', $params['send_order_id']); if (isset($params['activity_id']) && $params['activity_id']) $search_obj->where('activity_id', $params['activity_id']); if (isset($params['distribution_channel_id_array']) && $params['distribution_channel_id_array']) $search_obj->whereIn('distribution_channel_id', $params['distribution_channel_id_array']); if (isset($params['not_in_pay_merchant_id']) && count($params['not_in_pay_merchant_id']) > 0) { $search_obj->whereNotIn('pay_merchant_id', $params['not_in_pay_merchant_id']); } else { } return (float)$search_obj->sum('price'); } static function getAmountV2($params = []) { $search_obj = self::join('pay_merchants', 'pay_merchants.id', '=', 'orders.pay_merchant_id')->where('status', 'PAID'); if (isset($params['distribution_channel_id']) && $params['distribution_channel_id']) $search_obj->where('orders.distribution_channel_id', $params['distribution_channel_id']); if (isset($params['begin_time']) && $params['begin_time']) $search_obj->where('orders.created_at', '>=', $params['begin_time']); if (isset($params['end_time']) && $params['end_time']) $search_obj->where('orders.created_at', '<=', $params['end_time']); if (isset($params['uid']) && $params['uid']) $search_obj->where('orders.uid', $params['uid']); if (isset($params['send_order_id']) && $params['send_order_id']) $search_obj->where('orders.send_order_id', $params['send_order_id']); if (isset($params['activity_id']) && $params['activity_id']) $search_obj->where('orders.activity_id', $params['activity_id']); if (isset($params['distribution_channel_id_array']) && $params['distribution_channel_id_array']) $search_obj->whereIn('orders.distribution_channel_id', $params['distribution_channel_id_array']); if (isset($params['not_in_pay_merchant_id']) && count($params['not_in_pay_merchant_id']) > 0) { $search_obj->whereNotIn('orders.pay_merchant_id', $params['not_in_pay_merchant_id']); } if (isset($params['is_self_channel']) && $params['is_self_channel']) $search_obj->where('pay_merchants.is_self_channel', $params['is_self_channel']); return (float)$search_obj->sum('orders.price'); } //获取渠道当日数据 static function getChannelToday($distribution_channel_id) { $begin_time = date('Y-m-d'); $end_time = date("Y-m-d", strtotime($begin_time) + 86400); return self::select([DB::Raw("sum(price) as success_amount,count(1) as paid_number")]) ->where('distribution_channel_id', $distribution_channel_id) ->where('created_at', '>=', $begin_time) ->where('created_at', '<', $end_time) ->where('status', 'PAID') ->first(); } //获取渠道当日数据 static function getChannelsToday($distribution_channel_ids) { $begin_time = date('Y-m-d'); $end_time = date("Y-m-d", strtotime($begin_time) + 86400); return self::select([DB::Raw("sum(price) as success_amount,count(1) as paid_number")]) ->whereIn('distribution_channel_id', $distribution_channel_ids) ->where('created_at', '>=', $begin_time) ->where('created_at', '<', $end_time) ->where('status', 'PAID') ->first(); } //获取渠道当日数据 static function getPaymerchantToday($pay_merchant_id) { $begin_time = date('Y-m-d'); $end_time = date("Y-m-d", strtotime($begin_time) + 86400); return self::select([DB::Raw("sum(price) as success_amount,count(1) as paid_number")]) ->whereIn('pay_merchant_id', $pay_merchant_id) ->where('created_at', '>=', $begin_time) ->where('created_at', '<', $end_time) ->where('status', 'PAID') ->first(); } //获取渠道当日实时统计数据 static function getChannelTodayData($distribution_channel_id) { $begin_time = date('Y-m-d'); $end_time = date('Y-m-d', strtotime($begin_time) + 86400); $paid_info = self::select([DB::Raw("order_type,sum(price) as success_amount,count(1) as paid_num")]) ->where('distribution_channel_id', $distribution_channel_id) ->where('created_at', '>=', $begin_time) ->where('created_at', '<', $end_time) ->where('status', 'PAID') ->groupBy('order_type') ->get() ->toArray(); $unpaid_info = self::select([DB::Raw("order_type,sum(price),count(1) as unpaid_num")]) ->where('distribution_channel_id', $distribution_channel_id) ->where('created_at', '>=', $begin_time) ->where('created_at', '<', $end_time) ->where('status', 'UNPAID') ->groupBy('order_type') ->get() ->toArray(); $ret = [ 'amount' => 0, 'paid_num' => 0, 'total_order_num' => 0, 'recharge_unpaid_number' => 0, 'recharge_paid_number' => 0, 'recharge_success_amount' => 0, 'year_unpaid_number' => 0, 'year_paid_number' => 0, 'year_success_amount' => 0 ]; foreach ($paid_info as $item) { $ret['amount'] += $item['success_amount']; $ret['paid_num'] += $item['paid_num']; $ret['total_order_num'] += $item['paid_num']; if ($item['order_type'] == 'RECHARGE') { $ret['recharge_paid_number'] += $item['paid_num']; $ret['recharge_success_amount'] += $item['success_amount']; } if ($item['order_type'] == 'YEAR') { $ret['year_paid_number'] += $item['paid_num']; $ret['year_success_amount'] += $item['success_amount']; } } foreach ($unpaid_info as $uitem) { $ret['total_order_num'] += $uitem['unpaid_num']; if ($uitem['order_type'] == 'RECHARGE') $ret['recharge_unpaid_number'] += $uitem['unpaid_num']; if ($uitem['order_type'] == 'YEAR') $ret['year_unpaid_number'] += $uitem['unpaid_num']; } return $ret; } //获取渠道日数据 static function getChannelDateOrderInfo($distribution_channel_id, $date) { $begin_time = $date; $end_time = date("Y-m-d", strtotime($begin_time) + 86400); return self::select([DB::Raw("sum(price) as success_amount,count(1) as paid_number")]) ->where('distribution_channel_id', $distribution_channel_id) ->where('created_at', '>=', $begin_time) ->where('created_at', '<', $end_time) ->where('status', 'PAID') ->first(); } //获取渠道对应支付通道总额 static function getPayMerchantSourceAmount($params) { $search_obj = self::select([DB::Raw("pay_merchant_source,sum(price) as success_amount")], 'pay_merchant_source')->where('status', 'PAID'); if (isset($params['distribution_channel_id']) && $params['distribution_channel_id']) $search_obj->where('distribution_channel_id', $params['distribution_channel_id']); if (isset($params['begin_time']) && $params['begin_time']) $search_obj->where('created_at', '>=', $params['begin_time']); if (isset($params['end_time']) && $params['end_time']) $search_obj->where('created_at', '<=', $params['end_time']); if (isset($params['not_in_pay_merchant_id']) && count($params['not_in_pay_merchant_id']) > 0) { $search_obj->whereNotIn('pay_merchant_id', $params['not_in_pay_merchant_id']); } else { } return $search_obj->groupBy('pay_merchant_source')->pluck('success_amount', 'pay_merchant_source')->toArray(); } //获取付费用户数 static function getPayUserNum($send_order_id) { return self::where('send_order_id', $send_order_id)->where('status', 'PAID')->distinct('uid')->count('uid'); } //获取普通付费用户数 static function getNormalPayUserNum($send_order_id) { return self::where('send_order_id', $send_order_id)->where('order_type', 'RECHARGE')->where('status', 'PAID')->distinct('uid')->count('uid'); } //获取VIP付费用户数 static function getVipPayUserNum($send_order_id) { return self::where('send_order_id', $send_order_id)->where('order_type', 'YEAR')->where('status', 'PAID')->distinct('uid')->count('uid'); } //获取派单下的订单总数 static function getOrderCount($send_order_id) { return self::where('send_order_id', $send_order_id)->where('status', 'PAID')->count(); } //获取活动的订单总数 static function getActivityOrderNum($params = []) { $search_obj = self::orderBy('created_at', 'desc'); if (isset($params['status']) && $params['status']) $search_obj->where('status', $params['status']); if (isset($params['activity_id']) && $params['activity_id']) $search_obj->where('activity_id', $params['activity_id']); if (isset($params['begin_time']) && $params['begin_time']) $search_obj->where('created_at', '>=', $params['begin_time']); if (isset($params['end_time']) && $params['end_time']) $search_obj->where('created_at', '<=', $params['end_time']); if (isset($params['distribution_channel_id']) && $params['distribution_channel_id']) $search_obj->where('distribution_channel_id', $params['distribution_channel_id']); return $search_obj->count(); } //获取派单下的普通用户订单总数 static function getNormalOrderCount($send_order_id) { return self::where('send_order_id', $send_order_id)->where('order_type', 'RECHARGE')->where('status', 'PAID')->count(); } //获取派单下的VIP用户的订单总数 static function getVipOrderCount($send_order_id) { return self::where('send_order_id', $send_order_id)->where('order_type', 'YEAR')->where('status', 'PAID')->count(); } //获取渠道日付费用户数 static function getDayPayUserNumByChannelId($distribution_channel_id, $date) { $begin_time = $date; $end_time = date("Y-m-d", strtotime($date) + 86400); return self::where('distribution_channel_id', $distribution_channel_id) ->where('created_at', '>=', $begin_time) ->where('created_at', '<', $end_time) ->where('status', 'PAID') ->distinct('uid') ->count('uid'); } //获取渠道日包年vip付费用户数 static function getDayVipPayUserNumByChannelId($distribution_channel_id, $date) { $begin_time = $date; $end_time = date("Y-m-d", strtotime($date) + 86400); return self::where('distribution_channel_id', $distribution_channel_id) ->where('created_at', '>=', $begin_time) ->where('created_at', '<', $end_time) ->where('status', 'PAID') ->where('order_type', 'YEAR') ->distinct('uid') ->count('uid'); } //获取渠道日普通充值付费用户数 static function getDayRechargePayUserNumByChannelId($distribution_channel_id, $date) { $begin_time = $date; $end_time = date("Y-m-d", strtotime($date) + 86400); return self::where('distribution_channel_id', $distribution_channel_id) ->where('created_at', '>=', $begin_time) ->where('created_at', '<', $end_time) ->where('status', 'PAID') ->where('order_type', 'RECHARGE') ->distinct('uid') ->count('uid'); } //获取指定日期普通充值未支付订单数、支付订单数、总额 static function getChannelDayTicketRechargeData($distribution_channel_id, $date) { $begin_time = $date; $end_time = date("Y-m-d", strtotime($date) + 86400); $paid_info = self::select([DB::Raw("sum(price) as success_amount,count(1) as paid_num")]) ->where('distribution_channel_id', $distribution_channel_id) ->where('created_at', '>=', $begin_time) ->where('created_at', '<', $end_time) ->where('status', 'PAID') ->where('order_type', 'RECHARGE') ->first(); $unpaid_count = self::where('distribution_channel_id', $distribution_channel_id) ->where('created_at', '>=', $begin_time) ->where('created_at', '<', $end_time) ->where('order_type', 'RECHARGE') ->where('status', 'UNPAID') ->count(); return [ 'ticket_recharge_paid_num' => $paid_info->paid_num, 'ticket_recharge_amount' => (float)$paid_info->success_amount, 'ticket_recharge_unpaid_num' => $unpaid_count ]; } //获取指定日期包年充值未支付订单数、支付订单数、总额 static function getChannelDayYearRechargeData($distribution_channel_id, $date) { $begin_time = $date; $end_time = date("Y-m-d", strtotime($date) + 86400); $paid_info = self::select([DB::Raw("sum(price) as success_amount,count(1) as paid_num")]) ->where('distribution_channel_id', $distribution_channel_id) ->where('created_at', '>=', $begin_time) ->where('created_at', '<', $end_time) ->where('status', 'PAID') ->where('order_type', 'YEAR') ->first(); $unpaid_count = self::where('distribution_channel_id', $distribution_channel_id) ->where('created_at', '>=', $begin_time) ->where('created_at', '<', $end_time) ->where('order_type', 'YEAR') ->where('status', 'UNPAID') ->count(); return [ 'year_recharge_paid_num' => $paid_info->paid_num, 'year_recharge_amount' => (float)$paid_info->success_amount, 'year_recharge_unpaid_num' => $unpaid_count ]; } //获取渠道日首充数据 static function getChannelDayFirstRechargeData($distribution_channel_id, $date) { $begin_time = $date; $end_time = date("Y-m-d", strtotime($date) + 86400); $first_data = DB::select("select count(distinct uid) count,sum(price) amount from orders a where distribution_channel_id = {$distribution_channel_id} and created_at>'{$begin_time}' and created_at<'{$end_time}' and status ='PAID' and not exists (select uid from orders where a.uid = uid and created_at < '{$begin_time}' and status= 'PAID' and distribution_channel_id = {$distribution_channel_id} limit 1)"); return [ "count" => (int)$first_data[0]->count, "amount" => (float)$first_data[0]->amount ]; } //获取派单累计充值(追踪用户) static function getPromotionRegUserRechargeAmount($params = []) { $send_order_id = isset($params['send_order_id']) ? $params['send_order_id'] : 0; $end_time = isset($params['end_time']) ? $params['end_time'] : date('Y-m-d H:i:s'); if ($send_order_id) { $data = DB::select("select sum(price) amount from orders where status='PAID' and created_at <= '{$end_time}' and uid in (select id from users where send_order_id = '{$send_order_id}' )"); return (float)$data[0]->amount; } } static function getRechargeAmountGroupByOfficial($date) { $search_obj = self::orderBy('orders.id', 'desc')->join('force_subscribe_users', 'orders.uid', '=', 'force_subscribe_users.uid') ->join('official_accounts', 'force_subscribe_users.appid', '=', 'official_accounts.appid')->groupBy('official_accounts.appid')->groupBy('orders.distribution_channel_id'); if ($date) { $search_obj->where('orders.pay_end_at', '>=', $date . ' 00:00:00'); $search_obj->where('orders.pay_end_at', '<=', $date . ' 23:59:59'); } $search_obj->where('orders.status', 'PAID'); $data = $search_obj->select(DB::raw('sum(orders.price) as recharge_amount'), 'official_accounts.nickname', 'official_accounts.appid', 'orders.distribution_channel_id')->get()->toArray(); $chanenelRechargeAmount = []; foreach ($data as $item) { $distribution_channel_id = $item['distribution_channel_id']; if (!isset($chanenelRechargeAmount[$distribution_channel_id])) { $chanenelRechargeAmount[$distribution_channel_id] = 0; } $chanenelRechargeAmount[$distribution_channel_id] += (float)$item['recharge_amount']; } foreach ($data as &$dataItem) { $dataItem['date'] = $date; $dataItem['created_at'] = date('Y-m-d H:i:s'); $dataItem['updated_at'] = date('Y-m-d H:i:s'); foreach ($chanenelRechargeAmount as $key => $chanenelRechargeAmountItem) { if ($dataItem['distribution_channel_id'] == $key) { $dataItem['channel_recharge_amount'] = $chanenelRechargeAmountItem; } } } return $data; } static function getRechargeAmountGroupByOfficialAccount($date) { $search_obj = self::orderBy('id', 'desc')->where('status', 'PAID')->select('uid', 'price', 'distribution_channel_id'); if ($date) { $search_obj->where('created_at', '>=', $date . ' 00:00:00'); $search_obj->where('created_at', '<=', $date . ' 23:59:59'); } $result = $search_obj->get(); $official_accounts_result = DB::table('official_accounts')->select('appid', 'nickname')->get(); $temp_official_account = []; foreach ($official_accounts_result as $official_accounts_result_item) { $temp_official_account[$official_accounts_result_item->appid] = $official_accounts_result_item->nickname; } $temp_channel = []; $temp_channel_charge_amount = []; foreach ($result as $item) { if (!isset($temp_channel[$item->distribution_channel_id])) { $temp_channel[$item->distribution_channel_id] = []; } if (!isset($temp_channel_charge_amount[$item->distribution_channel_id])) { $temp_channel_charge_amount[$item->distribution_channel_id] = 0; } $force_subscribe_users_result = DB::table('force_subscribe_users')->where('uid', $item->uid)->where('is_subscribed', 1)->select('appid', 'distribution_channel_id')->first(); if (!$force_subscribe_users_result) { $force_subscribe_users_result = DB::table('force_subscribe_users')->where('uid', $item->uid)->where('is_subscribed', 0)->select('appid', 'distribution_channel_id')->first(); } if ($force_subscribe_users_result) { $temp_channel[$item->distribution_channel_id][$force_subscribe_users_result->appid][] = $item->price; } else { $temp_channel[$item->distribution_channel_id]['unknown'][] = $item->price; } $temp_channel_charge_amount[$item->distribution_channel_id] += $item->price; } //\Log::info($temp_channel); $finalArray = []; foreach ($temp_channel as $key => $temp_channel_item) { foreach ($temp_channel_item as $appid => $price) { $finalArray[] = [ 'date' => $date, 'nickname' => isset($temp_official_account[$appid]) ? $temp_official_account[$appid] : 'unknown', 'appid' => $appid, 'distribution_channel_id' => $key, 'recharge_amount' => array_sum($price), 'channel_recharge_amount' => $temp_channel_charge_amount[$key], 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s') ]; } } return $finalArray; } public static function getRechargeAmountGroupByPayMerchant($params) { $obj = self::join('pay_merchants', 'pay_merchants.id', '=', 'orders.pay_merchant_id') ->where('orders.status', '=', 'PAID'); if (isset($params['distribution_channel_id']) && $params['distribution_channel_id']) { $obj->where('orders.distribution_channel_id', $params['distribution_channel_id']); } if (isset($params['is_self_channel']) && $params['is_self_channel']) { $obj->where('pay_merchants.is_self_channel', 1); } if (isset($params['start_time']) && $params['start_time']) { $obj->where('orders.created_at', '>=', $params['start_time']); } if (isset($params['end_time']) && $params['end_time']) { $obj->where('orders.created_at', '<=', $params['end_time']); } $obj->groupBy('pay_merchants.pay_company_id'); return $obj->select(DB::raw('sum(orders.price) as amount,orders.distribution_channel_id,pay_company_id,pay_company_name'))->get(); } public static function getPayMerchantRechargeAmount($params) { $obj = self::where('pay_merchant_id', $params['pay_merchant_id']); if (isset($params['status']) && $params['status']) { $obj->where('status', $params['status']); } if (isset($params['start_time']) && $params['start_time']) { $obj->where('created_at', '>=', $params['start_time']); } if (isset($params['end_time']) && $params['end_time']) { $obj->where('created_at', '<=', $params['end_time']); } return $obj->sum('price'); } public static function IndexRaw($index_raw) { $model = new static; $model->setTable(DB::raw($model->getTable() . ' ' . $index_raw)); return $model; } #region 派单按用户注册统计 /** * 获取时间段内的派单号 * @param $start * @param $end * @return array */ public function getSendOrderIdByTime($start, $end): array { $result = self::leftjoin('users', 'users.id', 'orders.uid') ->where([ ['orders.created_at', '>=', $start], ['orders.created_at', '<', $end], ['orders.status', '=', 'PAID'], ['users.send_order_id', '>', 0] ]) ->select('users.send_order_id')->distinct()->get(); return $result ? $result->toArray() : []; } /** * 获取时间段内派单首充数,和首充金额 * @param $start * @param $end * @return array */ public function getSendOrderFirstPayCountAndPriceByTime($start, $end): array { $result = self::leftjoin('users', 'users.id', 'orders.uid') ->where([ ['orders.created_at', '>=', $start], ['orders.created_at', '<', $end], ['orders.status', '=', 'PAID'], ['orders.pay_type', '=', 1], ['users.send_order_id', '>', 0] ]) ->select('users.send_order_id', DB::raw('count(1) first'), DB::raw('sum(orders.price) price')) ->groupby('users.send_order_id')->get(); return $result ? $result->toArray() : []; } /** * 根据派单ID获取截止时间点前派单首充数,和首充金额 * @param $send_order_id * @param $end * @return array */ public function getSendOrderFirstPayCountAndPriceByID($send_order_id, $end): array { $result = self::join('users', 'users.id', 'orders.uid') ->where([ ['users.send_order_id', '=', $send_order_id], ['orders.created_at', '<', $end], ['orders.status', '=', 'PAID'], ['orders.pay_type', '=', 1] ]) ->select('users.send_order_id', DB::raw('count(1) first'), DB::raw('sum(orders.price) price')) ->groupby('users.send_order_id')->get(); return $result->isEmpty() ? [] : $result->first()->toArray(); } /** * 获取时间段内派单充值数和总金额 * @param $start * @param $end * @return array */ public function getSendOrderSuccessPayCountByTime($start, $end): array { $result = self::leftjoin('users', 'users.id', 'orders.uid') ->where([ ['orders.created_at', '>=', $start], ['orders.created_at', '<', $end], ['orders.status', '=', 'PAID'], ['users.send_order_id', '>', 0] ]) ->select('users.send_order_id', DB::raw('count(1) num'), DB::raw('sum(orders.price) price'))->groupby('users.send_order_id')->get(); return $result ? $result->toArray() : []; } /** * 根据派单ID获取时间段内派单充值数和总金额 * @param $send_order_id * @param $end * @return array */ public function getSendOrderSuccessPayCountByID($send_order_id, $end): array { $result = self::join('users', 'users.id', 'orders.uid') ->where([ ['orders.created_at', '<', $end], ['orders.status', '=', 'PAID'], ['users.send_order_id', '=', $send_order_id] ]) ->select('users.send_order_id', DB::raw('count(1) num'), DB::raw('count(distinct(uid)) u_num'), DB::raw('sum(orders.price) price')) ->groupby('users.send_order_id')->get(); return $result->isEmpty() ? [] : $result->first()->toArray(); } /** * 获取时间段内派单付费人数 * @param $start * @param $end * @return array */ public function getSendOrderSuccessPayUserCountByTime($start, $end): array { $result = self::join('users', 'users.id', 'orders.uid') ->where([ ['orders.created_at', '>=', $start], ['orders.created_at', '<', $end], ['orders.status', '=', 'PAID'], ['users.send_order_id', '>', 0] ]) ->select('users.send_order_id', DB::raw('count(distinct(users.id)) num')) ->groupby(['users.send_order_id'])->get(); return $result ? $result->toArray() : []; } /** * 获取时间段内派单N小时充值金额 * @param $start * @param $end * @param $hour * @return array */ public function getSendOrderPayPriceByHour($start, $end, $hour): array { $second = $hour * 60 * 60; $result = self::leftjoin('users', 'users.id', 'orders.uid') ->where([ ['orders.created_at', '>=', $start], ['orders.created_at', '<', $end], ['orders.status', '=', 'PAID'], ['users.send_order_id', '>', 0] ]) ->whereRaw('TIMESTAMPDIFF(SECOND,users.created_at,orders.created_at)<=' . $second) ->select('users.send_order_id', DB::raw('sum(orders.price) price')) ->groupby('users.send_order_id')->get(); return $result ? $result->toArray() : []; } /** * 获取时间段内派单N小时充值金额 * @param $send_order_id * @param $end * @param $hour * @return array */ public function getSendOrderPayPriceByIdAndHour($send_order_id, $end, $hour): array { $where = [ ['orders.created_at', '<', $end], ['orders.status', '=', 'PAID'], ['users.send_order_id', '=', $send_order_id] ]; $second = $hour * 60 * 60; $result = self::leftjoin('users', 'users.id', 'orders.uid') ->where($where) ->whereRaw('TIMESTAMPDIFF(SECOND,users.created_at,orders.created_at)<=' . $second) ->select('users.send_order_id', DB::raw('sum(orders.price) price')) ->groupby('users.send_order_id')->get(); return $result->isEmpty() ? [] : $result->first()->toArray(); } /** * 获取时间段内派单N小时(首充或非首充33)用户数 * @param $start * @param $end * @param $hour * @param int $first_pay_type 首充类型 -1全部 0非首充 1首充 * @return array */ public function getSendOrderPayUserCountByHour($start, $end, $hour, $first_pay_type = -1): array { $where = [ ['orders.created_at', '>=', $start], ['orders.created_at', '<', $end], ['orders.status', '=', 'PAID'], ['users.send_order_id', '>', 0] ]; if ($first_pay_type == 1) { $where = [ ['orders.created_at', '>=', $start], ['orders.created_at', '<', $end], ['orders.status', '=', 'PAID'], ['users.send_order_id', '>', 0], ['orders.pay_type', '=', 1] ]; } elseif ($first_pay_type == 0) { $where = [ ['orders.created_at', '>=', $start], ['orders.created_at', '<', $end], ['orders.status', '=', 'PAID'], ['users.send_order_id', '>', 0], ['orders.pay_type', '>', 1] ]; } $second = $hour * 60 * 60; $result = self::leftjoin('users', 'users.id', 'orders.uid') ->where($where) ->whereRaw('TIMESTAMPDIFF(SECOND,users.created_at,orders.created_at)<=' . $second) ->select('users.send_order_id', DB::raw('count(distinct(users.id)) num')) ->groupby('users.send_order_id')->get(); return $result ? $result->toArray() : []; } /** * 获取时间段内派单N小时(首充或非首充33)用户数 * @param $send_order_id * @param $end * @param $hour * @param int $first_pay_type 首充类型 -1全部 0非首充 1首充 * @return array */ public function getSendOrderPayUserCountByIdAndHour($send_order_id, $end, $hour, $first_pay_type = -1): array { $where = [ ['orders.created_at', '<', $end], ['orders.status', '=', 'PAID'], ['users.send_order_id', '=', $send_order_id] ]; if ($first_pay_type == 1) { $where = [ ['orders.created_at', '<', $end], ['orders.status', '=', 'PAID'], ['users.send_order_id', '=', $send_order_id], ['orders.pay_type', '=', 1] ]; } elseif ($first_pay_type == 0) { $where = [ ['orders.created_at', '<', $end], ['orders.status', '=', 'PAID'], ['users.send_order_id', '=', $send_order_id], ['orders.pay_type', '>', 1] ]; } $second = $hour * 60 * 60; $result = self::leftjoin('users', 'users.id', 'orders.uid') ->where($where) ->whereRaw('TIMESTAMPDIFF(SECOND,users.created_at,orders.created_at)<=' . $second) ->select('users.send_order_id', DB::raw('count(distinct(users.id)) num')) ->groupby('users.send_order_id')->get(); return $result->isEmpty() ? [] : $result->first()->toArray(); } #endregion }