1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417 |
- <?php
- namespace App\Http\Controllers\Admin;
- use App\Filters\BikeFilter;
- use App\Filters\CardRidingOrderFilter;
- use App\Filters\DepositCardOrderFilter;
- use App\Filters\OrderFilter;
- use App\Filters\OrderRentFilter;
- use App\Filters\RechargeOrderFilter;
- use App\Filters\StatisticFilter;
- use App\Filters\UserFilter;
- use App\Filters\WalletLogFilter;
- use App\Filters\WorkOrderFilter;
- use App\Models\AdminUser;
- use App\Models\AdminUserArea;
- use App\Models\Area;
- use App\Models\Bike;
- // use App\Models\BikeTrouble;
- use App\Models\CardRidingOrder;
- use App\Models\DepositCardOrder;
- use App\Models\Model;
- use App\Models\Order;
- use App\Models\OrderRent;
- use App\Models\RechargeOrder;
- use App\Models\Statistic;
- use App\Models\User;
- use App\Models\UserPhoneDetail;
- use App\Models\WalletLog;
- use App\Models\WorkOrder;
- use App\Utils\Admin;
- use App\Utils\RedisKeys;
- use Carbon\Carbon;
- use Illuminate\Http\Request;
- use App\Http\Controllers\Controller;
- use Illuminate\Support\Facades\DB;
- use Illuminate\Support\Facades\Log;
- /**
- * Class IndexController
- * @package App\Http\Controllers\Admin
- */
- class IndexController extends Controller
- {
- /**
- * topIndex 首页头部统计数据
- *
- * @param Request $request
- * @return \Illuminate\Http\JsonResponse
- * @author Fx
- *
- */
- public function topIndex(Request $request)
- {
- $area_id = $request->get('area_id') ?? '';
- $data = [];
- $data['new_order'] = $this->newOrder($area_id);
- $data['total_user'] = $this->totalUser($area_id);
- $data['total_order'] = $this->totalOrder($area_id);
- $data['total_profit'] = $this->totalProfit($area_id);
- return $this->ok($data);
- }
- /**
- * todoEvent 首页待办事项 统计数据
- *
- * @param BikeFilter $bikeFilter
- * @param OrderFilter $orderFilter
- * @param OrderRentFilter $orderRentFilter
- * @param WorkOrderFilter $workOrderFilter
- * @return \Illuminate\Http\JsonResponse
- * @author Fx
- *
- */
- public function todoEvent(BikeFilter $bikeFilter, OrderFilter $orderFilter, OrderRentFilter $orderRentFilter, WorkOrderFilter $workOrderFilter)
- {
- $data = [];
- $data['low_battery_num'] = Bike::query()->filter($bikeFilter);
- $data['long_time_no_ridding'] = Order::query()->filter($orderFilter);
- $data['long_time_no_return_ridding'] = Order::query()->filter($orderFilter);
- $long_time_no_return_ridding_order_rent = OrderRent::query()->filter($orderRentFilter);
- $data['trouble_num'] = Bike::query()->filter($bikeFilter);
- $data['warning_num'] = WorkOrder::query()->where('type', WorkOrder::TYPE_ALERT)->filter($workOrderFilter);
- $admin_id = Admin::user()->id;
- if (!Admin::isAdministrator()) {
- $area_ids = AdminUser::getAreaIdsByAdminId($admin_id);
- $area_id = AdminUserArea::query()->where('admin_id', $admin_id)->pluck('area_id')->toArray();
- $area_ids = array_merge($area_ids, $area_id);
- $data['low_battery_num'] = $data['low_battery_num']->whereIn('put_area_id', $area_ids);
- $data['long_time_no_ridding'] = $data['long_time_no_ridding']->whereIn('area_id', $area_ids);
- $data['long_time_no_return_ridding'] = $data['long_time_no_return_ridding']->whereIn('area_id', $area_ids);
- $long_time_no_return_ridding_order_rent = $long_time_no_return_ridding_order_rent->whereIn('area_id', $area_ids);
- $data['trouble_num'] = $data['trouble_num']->whereIn('put_area_id', $area_ids);
- $data['warning_num'] = $data['warning_num']->whereIn('area_id', $area_ids);
- }
- // 低电量
- $data['low_battery_num'] = $data['low_battery_num']
- ->where('is_low_battery_power', Bike::BATTERY_POWER_LOW)
- ->where('put_status', Bike::PUT_STATUS_YES)
- ->count('id');
- // 24小时未骑车辆
- $data['long_time_no_ridding'] = $data['long_time_no_ridding']
- ->whereIn('status', [Order::STATUS_PAUSE_BIKE, Order::STATUS_RIDE_BIKE])
- ->count('id');
- // 24小时未还车 此处查询订单
- $data['long_time_no_return_ridding'] = $data['long_time_no_return_ridding']
- ->where(function ($q) {
- $q->where('status', Order::STATUS_PAUSE_BIKE)
- ->orWhere('status', Order::STATUS_RIDE_BIKE);
- })
- ->where('start_use_bike_time', '<', date('Y-m-d H:i:s', strtotime('-1 days', time())))
- ->count('id');
- $long_time_no_return_ridding_order_rent = $long_time_no_return_ridding_order_rent
- ->where(function ($q) {
- $q->where('status', OrderRent::STATUS_RENT_BIKE);
- })
- ->where('start_use_bike_time', '<', date('Y-m-d H:i:s', strtotime('-1 days', time())))
- ->count('id');
- $data['long_time_no_return_ridding'] += $long_time_no_return_ridding_order_rent;
- //故障车辆
- $data['trouble_num'] = $data['trouble_num']
- ->where('is_trouble', Bike::TROUBLE_YES)
- ->count('id');
- // 报警信息
- $data['warning_num'] = $data['warning_num']
- ->where('status', WorkOrder::STATUS_NO)
- ->count('id');
- // $data['warning_num'] = 0;
- return $this->ok($data);
- }
- /**
- * profitPolygonalChart 总收益 折线统计图
- *
- * @param Request $request
- * @param WalletLogFilter $walletLogFilter
- * @return \Illuminate\Http\JsonResponse
- * @author Fx
- *
- */
- /**
- * profitStatistics 日收益统计信息
- *
- * @param $area_id
- * @return array
- * @author Fx
- *
- */
- private function profitStatistics($area_id, $dateBetween)
- {
- if (!empty($dateBetween)) {
- $profit_statistic_date_start = Carbon::parse($dateBetween[0])->subDay()->format('Y-m-d');
- $profit_statistic_date_end = Carbon::parse($dateBetween[1])->format('Y-m-d');
- } else {
- $profit_statistic_date_start = date('Y-m-d', strtotime("-8 day"));
- $profit_statistic_date_end = Carbon::today();
- }
- if ($area_id == config('statistic.all')) {
- // 判断是否为超级管理员
- $admin_id = Admin::user()->id;
- if (!Admin::isAdministrator() && !Admin::isNormalAdministrator()) {
- $area_ids = AdminUser::getAreaIdsByAdminId($admin_id);
- $profit_statistics = Statistic::query()
- ->where('slug', Statistic::SLUG_PROFIT_STATIC)
- ->where('date', '>', $profit_statistic_date_start)
- ->where('date', '<', $profit_statistic_date_end)
- // ->where('area_id',$area_id)
- ->whereIn('area_id', $area_ids)
- ->select(['date', 'body'])
- ->orderByDesc('date')
- ->get()
- ->toArray();
- // Log::info($profit_statistics);
- $arr1 = [];
- foreach ($profit_statistics as $v) {
- // 非超级管理员 需要重新组装叠加总收益统计
- $profit_statistics_arr = object_array(json_decode($v['body']));
- if (array_key_exists($v['date'], $arr1)) {
- $arr1[$v['date']] += $profit_statistics_arr['profit'] ?? 0;
- } else {
- $arr1[$v['date']] = $profit_statistics_arr['profit'] ?? 0;
- }
- }
- $res = [];
- foreach ($arr1 as $k => $v) {
- $arr2 = [];
- $arr2['profit'] = $v;
- $arr2['date'] = $k;
- $res[] = $arr2;
- }
- return $res;
- }
- }
- // 其他均走下面 按照区域id查询
- $profit_statistics = Statistic::query()
- ->where('slug', Statistic::SLUG_PROFIT_STATIC)
- ->where('date', '>', $profit_statistic_date_start)
- ->where('date', '<', $profit_statistic_date_end)
- ->where('area_id', $area_id)
- ->select(['date', 'body'])
- ->orderByDesc('date')
- ->get()
- ->toArray();
- $res = [];
- // dd($profit_statistics);
- foreach ($profit_statistics as $v) {
- $profit_statistics_arr = object_array(json_decode($v['body']));
- $profit_arr_statistics = [];
- $profit_arr_statistics['profit'] = $profit_statistics_arr['profit'] ?? 0;
- $profit_arr_statistics['date'] = $v['date'];
- $res[] = $profit_arr_statistics;
- }
- return $res;
- }
- /**
- * bikeDailyAverage 日均车收益
- *
- * @param $days
- * @param $statisticFilter
- * @return array|\Illuminate\Http\JsonResponse
- * @author Fx
- *
- */
- private function bikeDailyAverage($days, $statisticFilter)
- {
- if (empty($days)) return $this->error('缺少参数');
- $newOrders = Statistic::query()
- ->filter($statisticFilter);
- $admin_id = Admin::user()->id;
- if (!Admin::isAdministrator()) {
- $area_ids = AdminUser::getAreaIdsByAdminId($admin_id);
- if (count($area_ids) !== 0) {
- $newOrders = $newOrders->whereIn('area_id', $area_ids);
- } else {
- $area_id = AdminUserArea::query()->where('admin_id', $admin_id)->first('area_id');
- $area_id = $area_id ?? 0;
- $newOrders = $newOrders->where('area_id', $area_id);
- }
- }
- switch ($days) {
- case 'today':
- return [];
- break;
- case 'threeDays':
- $i = 2;
- break;
- case 'sevenDays':
- $i = 6;
- break;
- case 'fifteenDays':
- $i = 14;
- break;
- case 'thirtyDays':
- $i = 29;
- break;
- default:
- return $this->error('参数错误');
- }
- if ($days !== 'today') {
- $paramDays = Carbon::today()->subDays($i);
- // 赋值一个值为0得数组
- $arr = [];
- for ($i; $i >= 0; $i--) {
- $str = Carbon::today()->subDays($i)->format('Y/m/d');
- $arr[$str] = 0;
- }
- // 有数据得数组
- $newOrders = $newOrders->where('date', '>', $paramDays)
- ->where('slug',Statistic::SLUG_PROFIT_STATIC)
- ->select(['date', 'body'])
- ->orderByDesc('date')
- ->get()
- ->toArray();
- $newOrdersKeyVal = [];
- if (!empty($newOrders)) {
- foreach ($newOrders as $v) {
- $profit_statistics_arr = object_array(json_decode($v['body'],true));
- $profit_arr_statistics['profit'] = $profit_statistics_arr['profit'] ?? 0;
- $profit_arr_statistics['put_bikes'] = $profit_statistics_arr['put_bikes'] ?? 0;
- if ($profit_arr_statistics['put_bikes'] == 0) {
- $newOrdersKeyVal[Carbon::parse($v['date'])->format('Y/m/d')] = 0;
- } else {
- $newOrdersKeyVal[Carbon::parse($v['date'])->format('Y/m/d')] = number_format($profit_arr_statistics['profit'] / $profit_arr_statistics['put_bikes'], 2);
- }
- }
- }
- // 合并覆盖0
- // Log::info($arr);
- // Log::info($newOrdersKeyVal);
- $merge = array_merge($arr, $newOrdersKeyVal);
- // 重组结构
- $data = [];
- foreach ($merge as $ks => $vs) {
- $data[] = ['date' => $ks, 'value' => $vs];
- }
- }
- return $data;
- }
- public function profitPolygonalChart($days, $filter, $model, $money = 'pay_money')
- {
- if (empty($days)) return $this->error('缺少参数');
- $newOrders = $model
- ->filter($filter)
- ->where('pay_status', 1);
- $admin_id = Admin::user()->id;
- if (!Admin::isAdministrator()) {
- $area_ids = AdminUser::getAreaIdsByAdminId($admin_id);
- if (count($area_ids) !== 0) {
- $newOrders = $newOrders->whereIn('area_id', $area_ids);
- } else {
- $area_id = AdminUserArea::query()->where('admin_id', $admin_id)->first('area_id');
- $area_id = $area_id ?? 0;
- $newOrders = $newOrders->where('area_id', $area_id);
- }
- }
- switch ($days) {
- case 'today':
- $today = Carbon::today();
- $newOrders = $newOrders->where('pay_time', '>', $today)
- ->selectRaw("DATE_FORMAT(pay_time,'%m-%d %H:00') as date,sum($money) as value")
- ->groupBy('date')->get()->toArray();
- // 有数据得数组
- $newOrdersKeyVal = [];
- if (!empty($newOrders)) {
- foreach ($newOrders as $v) {
- $newOrdersKeyVal[$v['date']] = $v['value'];
- }
- }
- // 为0得数组
- $i = Carbon::now()->format('H');
- $arr = [];
- for ($i; $i >= 0; $i--) {
- $str = Carbon::now()->subHours($i)->format('m-d H:00');
- $arr[$str] = 0;
- }
- //合并
- $merge = array_merge($arr, $newOrdersKeyVal);
- $data = [];
- foreach ($merge as $key => $value) {
- $data[] = ['date' => $key, 'value' => $value];
- }
- break;
- case 'threeDays':
- $i = 2;
- break;
- case 'sevenDays':
- $i = 6;
- break;
- case 'fifteenDays':
- $i = 14;
- break;
- case 'thirtyDays':
- $i = 29;
- break;
- default:
- return $this->error('参数错误');
- }
- if ($days !== 'today') {
- $paramDays = Carbon::today()->subDays($i);
- // 赋值一个值为0得数组
- $arr = [];
- for ($i; $i >= 0; $i--) {
- $str = Carbon::today()->subDays($i)->format('Y/m/d');
- $arr[$str] = 0;
- }
- // 有数据得数组
- $newOrders = $newOrders->where('pay_time', '>', $paramDays)
- ->selectRaw("DATE_FORMAT(pay_time,'%Y/%m/%d') as date,sum($money) as value")
- ->groupBy('date')->get()->toArray();
- $newOrdersKeyVal = [];
- if (!empty($newOrders)) {
- foreach ($newOrders as $v) {
- $newOrdersKeyVal[$v['date']] = $v['value'];
- }
- }
- // 合并覆盖0
- $merge = array_merge($arr, $newOrdersKeyVal);
- // 重组结构
- $data = [];
- foreach ($merge as $ks => $vs) {
- $data[] = ['date' => $ks, 'value' => $vs];
- }
- }
- return $data;
- }
- public function profitChart(Request $request, OrderFilter $orderFilter, RechargeOrderFilter $rechargeOrderFilter, CardRidingOrderFilter $cardRidingOrderFilter, DepositCardOrderFilter $depositCardOrderFilter, StatisticFilter $statisticFilter)
- {
- $days = $request->get('days') ?? '';
- $ordersChart = $this->profitPolygonalChart($days, $orderFilter, Order::query());
- $ordersDispatchMoneyChart = $this->profitPolygonalChart($days, $orderFilter, Order::query(), 'dispatch_money');
- $rechargeOrdersChart = $this->profitPolygonalChart($days, $rechargeOrderFilter, RechargeOrder::query());
- $cardRidingOrdersChart = $this->profitPolygonalChart($days, $cardRidingOrderFilter, CardRidingOrder::query());
- $depositCardOrdersChart = $this->profitPolygonalChart($days, $depositCardOrderFilter, DepositCardOrder::query());
- $total = [];
- foreach ($ordersChart as $k => $v) {
- $total[] = [
- 'date' => $v['date'],
- 'value' => bcadd(bcadd(bcadd($v['value'], $rechargeOrdersChart[$k]['value'], 2), $cardRidingOrdersChart[$k]['value'], 2), $depositCardOrdersChart[$k]['value'], 2)
- ];
- }
- $bikeDailyAverageChart = $this->bikeDailyAverage($days, $statisticFilter);
- return $this->ok([
- [
- 'name' => '普通订单收益',
- 'data' => $ordersChart
- ],
- [
- 'name' => '普通订单调度费收益',
- 'data' => $ordersDispatchMoneyChart
- ],
- [
- 'name' => '充值收益',
- 'data' => $rechargeOrdersChart
- ],
- [
- 'name' => '骑行卡收益',
- 'data' => $cardRidingOrdersChart
- ],
- [
- 'name' => '免押金卡收益',
- 'data' => $depositCardOrdersChart
- ],
- [
- 'name' => '总收益',
- 'data' => $total
- ],
- [
- 'name' => '日均车收益',
- 'data' => $bikeDailyAverageChart
- ],
- ]);
- }
- /**
- * newUsersChart 新用户增长统计图
- *
- * @param Request $request
- * @return array
- * @author Fx
- *
- */
- public function usersChart($days, $userFilter, $deposit = false, $deposit_type = User::DEPOSIT_MONEY)
- {
- $newUsers = User::query()
- ->filter($userFilter)
- ->where('is_card_certified', User::CARD_OK);
- if ($deposit) {
- $newUsers = $newUsers->where('deposit_type', $deposit_type);
- }
- $admin_id = Admin::user()->id;
- if (!Admin::isAdministrator()) {
- $area_ids = AdminUser::getAreaIdsByAdminId($admin_id);
- if (count($area_ids) !== 0) {
- $newUsers = $newUsers->whereIn('register_area_id', $area_ids);
- } else {
- $area_id = AdminUserArea::query()->where('admin_id', $admin_id)->first('area_id');
- $area_id = $area_id ?? 0;
- $newUsers = $newUsers->where('register_area_id', $area_id);
- }
- }
- $newOrders = $newUsers;
- switch ($days) {
- case 'today':
- $today = Carbon::today();
- $newOrders = $newOrders->where('created_at', '>', $today)
- ->selectRaw('DATE_FORMAT(created_at,"%m-%d %H:00") as date,count(id) as value')
- ->groupBy('date')->get()->toArray();
- // 有数据得数组
- $newOrdersKeyVal = [];
- if (!empty($newOrders)) {
- foreach ($newOrders as $v) {
- $newOrdersKeyVal[$v['date']] = $v['value'];
- }
- }
- // 为0得数组
- $i = Carbon::now()->format('H');
- $arr = [];
- for ($i; $i >= 0; $i--) {
- $str = Carbon::now()->subHours($i)->format('m-d H:00');
- $arr[$str] = 0;
- }
- //合并
- $merge = array_merge($arr, $newOrdersKeyVal);
- $data = [];
- foreach ($merge as $key => $value) {
- $data[] = ['date' => $key, 'value' => $value];
- }
- break;
- case 'threeDays':
- $i = 2;
- break;
- case 'sevenDays':
- $i = 6;
- break;
- case 'fifteenDays':
- $i = 14;
- break;
- case 'thirtyDays':
- $i = 29;
- break;
- default:
- return $this->error('参数错误');
- }
- if ($days !== 'today') {
- $paramDays = Carbon::today()->subDays($i);
- // 赋值一个值为0得数组
- $arr = [];
- for ($i; $i >= 0; $i--) {
- $str = Carbon::today()->subDays($i)->format('Y/m/d');
- $arr[$str] = 0;
- }
- // 有数据得数组
- $newOrders = $newOrders->where('created_at', '>', $paramDays)
- ->selectRaw('DATE_FORMAT(created_at,"%Y/%m/%d") as date,count(id) as value')
- ->groupBy('date')->get()->toArray();
- $newOrdersKeyVal = [];
- if (!empty($newOrders)) {
- foreach ($newOrders as $v) {
- $newOrdersKeyVal[$v['date']] = $v['value'];
- }
- }
- // 合并覆盖0
- $merge = array_merge($arr, $newOrdersKeyVal);
- // 重组结构
- $data = [];
- foreach ($merge as $ks => $vs) {
- $data[] = ['date' => $ks, 'value' => $vs];
- }
- }
- return $data;
- }
- public function newUsersChart(Request $request, UserFilter $userFilter)
- {
- $days = $request->get('days') ?? '';
- if (empty($days)) return $this->error('缺少参数');
- $usersChart = $this->usersChart($days, $userFilter);
- $usersChartDepositCard = $this->usersChart($days, $userFilter, true, User::DEPOSIT_CARD);
- $usersChartDepositMoney = $this->usersChart($days, $userFilter, true, User::DEPOSIT_MONEY);
- return $this->ok([
- [
- 'name' => '每日增长用户数',
- 'data' => $usersChart
- ],
- [
- 'name' => '每日增长用户(缴纳押金)',
- 'data' => $usersChartDepositCard
- ],
- [
- 'name' => '每日增长用户(押金卡)',
- 'data' => $usersChartDepositMoney
- ]
- ]);
- }
- /**
- * newOrderChart 新订单统计图
- *
- * @param Request $request
- * @param OrderFilter $orderFilter
- * @return array
- * @author Fx
- *
- */
- public function orderChart($days, $orderFilter, $dispatch_money = false)
- {
- $newOrders = Order::query()
- ->filter($orderFilter)
- ->where('status', Order::STATUS_COMPLETE_ORDER);
- if ($dispatch_money) {
- $newOrders = $newOrders->where('dispatch_money', '>', 0);
- }
- $admin_id = Admin::user()->id;
- if (!Admin::isAdministrator()) {
- $area_ids = AdminUser::getAreaIdsByAdminId($admin_id);
- if (count($area_ids) !== 0) {
- $newOrders = $newOrders->whereIn('area_id', $area_ids);
- } else {
- $area_id = AdminUserArea::query()->where('admin_id', $admin_id)->first('area_id');
- $area_id = $area_id ?? 0;
- $newOrders = $newOrders->where('area_id', $area_id);
- }
- }
- switch ($days) {
- case 'today':
- $today = Carbon::today();
- $newOrders = $newOrders->where('created_at', '>', $today)
- ->selectRaw('DATE_FORMAT(created_at,"%m-%d %H:00") as date,count(id) as value')
- ->groupBy('date')->get()->toArray();
- // 有数据得数组
- $newOrdersKeyVal = [];
- if (!empty($newOrders)) {
- foreach ($newOrders as $v) {
- $newOrdersKeyVal[$v['date']] = $v['value'];
- }
- }
- // 为0得数组
- $i = Carbon::now()->format('H');
- $arr = [];
- for ($i; $i >= 0; $i--) {
- $str = Carbon::now()->subHours($i)->format('m-d H:00');
- $arr[$str] = 0;
- }
- //合并
- $merge = array_merge($arr, $newOrdersKeyVal);
- $data = [];
- foreach ($merge as $key => $value) {
- $data[] = ['date' => $key, 'value' => $value];
- }
- break;
- case 'threeDays':
- $i = 2;
- break;
- case 'sevenDays':
- $i = 6;
- break;
- case 'fifteenDays':
- $i = 14;
- break;
- case 'thirtyDays':
- $i = 29;
- break;
- default:
- return [];
- }
- if ($days !== 'today') {
- $paramDays = Carbon::today()->subDays($i);
- // 赋值一个值为0得数组
- $arr = [];
- for ($i; $i >= 0; $i--) {
- $str = Carbon::today()->subDays($i)->format('Y/m/d');
- $arr[$str] = 0;
- }
- // 有数据得数组
- $newOrders = $newOrders->where('created_at', '>', $paramDays)
- ->selectRaw('DATE_FORMAT(created_at,"%Y/%m/%d") as date,count(id) as value')
- ->groupBy('date')->get()->toArray();
- $newOrdersKeyVal = [];
- if (!empty($newOrders)) {
- foreach ($newOrders as $v) {
- $newOrdersKeyVal[$v['date']] = $v['value'];
- }
- }
- // 合并覆盖0
- $merge = array_merge($arr, $newOrdersKeyVal);
- // 重组结构
- $data = [];
- foreach ($merge as $ks => $vs) {
- $data[] = ['date' => $ks, 'value' => $vs];
- }
- }
- return $data;
- }
- public function newOrderChart(Request $request, OrderFilter $orderFilter)
- {
- $days = $request->get('days') ?? '';
- if (empty($days)) return $this->error('缺少参数');
- $newOrderChart = $this->orderChart($days, $orderFilter);
- $dispatchMoneyNewOrderChart = $this->orderChart($days, $orderFilter, true);
- return $this->ok([
- [
- 'name' => '总订单数',
- 'data' => $newOrderChart
- ], [
- 'name' => '有调度费的订单数',
- 'data' => $dispatchMoneyNewOrderChart
- ],
- ]);
- }
- /**
- * newDayRentOrderChart 日租新订单统计图
- *
- * @param Request $request
- * @return array
- * @author Fx
- *
- */
- public function dayRentOrderChart($days, $orderRentFilter, $dispatch_money = false)
- {
- $newOrders = OrderRent::query()
- ->filter($orderRentFilter)
- ->where('status', OrderRent::STATUS_COMPLETE_ORDER);
- if ($dispatch_money) {
- $newOrders = $newOrders->where('dispatch_money', '>', 0);
- }
- $admin_id = Admin::user()->id;
- if (!Admin::isAdministrator()) {
- $area_ids = AdminUser::getAreaIdsByAdminId($admin_id);
- if (count($area_ids) !== 0) {
- $newOrders = $newOrders->whereIn('area_id', $area_ids);
- } else {
- $area_id = AdminUserArea::query()->where('admin_id', $admin_id)->first('area_id');
- $area_id = $area_id ?? 0;
- $newOrders = $newOrders->where('area_id', $area_id);
- }
- }
- switch ($days) {
- case 'today':
- $today = Carbon::today();
- $newOrders = $newOrders->where('created_at', '>', $today)
- ->selectRaw('DATE_FORMAT(created_at,"%m-%d %H:00") as date,count(id) as value')
- ->groupBy('date')->get()->toArray();
- // 有数据得数组
- $newOrdersKeyVal = [];
- if (!empty($newOrders)) {
- foreach ($newOrders as $v) {
- $newOrdersKeyVal[$v['date']] = $v['value'];
- }
- }
- // 为0得数组
- $i = Carbon::now()->format('H');
- $arr = [];
- for ($i; $i >= 0; $i--) {
- $str = Carbon::now()->subHours($i)->format('m-d H:00');
- $arr[$str] = 0;
- }
- //合并
- $merge = array_merge($arr, $newOrdersKeyVal);
- $data = [];
- foreach ($merge as $key => $value) {
- $data[] = ['date' => $key, 'value' => $value];
- }
- break;
- case 'threeDays':
- $i = 2;
- break;
- case 'sevenDays':
- $i = 6;
- break;
- case 'fifteenDays':
- $i = 14;
- break;
- case 'thirtyDays':
- $i = 29;
- break;
- default:
- return [];
- }
- if ($days !== 'today') {
- $paramDays = Carbon::today()->subDays($i);
- // 赋值一个值为0得数组
- $arr = [];
- for ($i; $i >= 0; $i--) {
- $str = Carbon::today()->subDays($i)->format('Y/m/d');
- $arr[$str] = 0;
- }
- // 有数据得数组
- $newOrders = $newOrders->where('created_at', '>', $paramDays)
- ->selectRaw('DATE_FORMAT(created_at,"%Y/%m/%d") as date,count(id) as value')
- ->groupBy('date')->get()->toArray();
- $newOrdersKeyVal = [];
- if (!empty($newOrders)) {
- foreach ($newOrders as $v) {
- $newOrdersKeyVal[$v['date']] = $v['value'];
- }
- }
- // 合并覆盖0
- $merge = array_merge($arr, $newOrdersKeyVal);
- // 重组结构
- $data = [];
- foreach ($merge as $ks => $vs) {
- $data[] = ['date' => $ks, 'value' => $vs];
- }
- }
- return $data;
- }
- public function newDayRentOrderChart(Request $request, OrderRentFilter $orderRentFilter)
- {
- $days = $request->get('days') ?? '';
- if (empty($days)) return $this->error('缺少参数');
- $newOrderChart = $this->dayRentOrderChart($days, $orderRentFilter);
- $dispatchMoneyNewOrderChart = $this->dayRentOrderChart($days, $orderRentFilter, true);
- return $this->ok([
- [
- 'name' => '新增日租订单',
- 'data' => $newOrderChart
- ], [
- 'name' => '新增日租订单(调度费大于0)',
- 'data' => $dispatchMoneyNewOrderChart
- ],
- ]);
- }
- /**
- * riddingRanking 普通订单骑行排行榜
- *
- * @param Request $request
- * @return \Illuminate\Http\JsonResponse
- * @author Fx
- *
- */
- public function riddingRanking(Request $request, OrderFilter $orderFilter)
- {
- $days = $request->get('days') ?? '';
- if (empty($days)) return $this->error('缺少参数');
- $order = Order::query()
- ->filter($orderFilter)
- ->where('status', Order::STATUS_COMPLETE_ORDER)
- ->with(['users']);
- $admin_id = Admin::user()->id;
- if (!Admin::isAdministrator()) {
- $area_ids = AdminUser::getAreaIdsByAdminId($admin_id);
- if (count($area_ids) !== 0) {
- $order = $order->whereIn('area_id', $area_ids);
- } else {
- $area_id = AdminUserArea::query()->where('admin_id', $admin_id)->first('area_id');
- $area_id = $area_id ?? 0;
- $order = $order->where('area_id', $area_id);
- }
- }
- switch ($days) {
- case 'today':
- $today = Carbon::today();
- $order = $order->where('created_at', '>', $today);
- break;
- case 'sevenDays':
- $time = Carbon::today()->subDays(7);
- $order = $order->where('created_at', '>', $time);
- break;
- case 'oneMonth':
- $time = Carbon::today()->subMonth();
- $order = $order->where('created_at', '>', $time);
- break;
- case 'sixMonth':
- $time = Carbon::today()->subMonths(6);
- $order = $order->where('created_at', '>', $time);
- break;
- default:
- return $this->error('参数错误');
- }
- $order = $order
- ->groupBy(['user_id'])
- ->select('user_id', DB::raw('count(id) as total_num'))
- ->orderByDesc('total_num')
- ->get()
- ->take(10);
- // ->take(10);
- // Log::info($order);
- $i = 0;
- foreach ($order as &$v) {
- $v['username'] = $v->users->nickname ?? '';
- $v['phone'] = $v->users->mobile ?? '';
- $v['ranking'] = ++$i;
- unset($v);
- }
- return $this->ok($order);
- }
- /**
- * riddingRankingByDayRentOrder 日租订单骑行排行榜
- *
- * @param Request $request
- * @return \Illuminate\Http\JsonResponse
- * @author Fx
- *
- */
- public function riddingRankingByDayRentOrder(Request $request, OrderRentFilter $orderRentFilter)
- {
- $days = $request->get('days') ?? '';
- if (empty($days)) return $this->error('缺少参数');
- $order = OrderRent::query()
- ->filter($orderRentFilter)
- ->where('status', OrderRent::STATUS_COMPLETE_ORDER)
- ->with(['users']);
- $admin_id = Admin::user()->id;
- if (!Admin::isAdministrator()) {
- $area_ids = AdminUser::getAreaIdsByAdminId($admin_id);
- if (count($area_ids) !== 0) {
- $order = $order->whereIn('area_id', $area_ids);
- } else {
- $area_id = AdminUserArea::query()->where('admin_id', $admin_id)->first('area_id');
- $area_id = $area_id ?? 0;
- $order = $order->where('area_id', $area_id);
- }
- }
- switch ($days) {
- case 'today':
- $today = Carbon::today();
- $order = $order->where('pay_time', '>', $today);
- break;
- case 'sevenDays':
- $time = Carbon::today()->subDays(7);
- $order = $order->where('pay_time', '>', $time);
- break;
- case 'oneMonth':
- $time = Carbon::today()->subMonth();
- $order = $order->where('pay_time', '>', $time);
- break;
- case 'sixMonth':
- $time = Carbon::today()->subMonths(6);
- $order = $order->where('pay_time', '>', $time);
- break;
- default:
- return $this->error('参数错误');
- }
- $order = $order
- ->groupBy(['user_id'])
- ->select('user_id', DB::raw('count(id) as total_num'))
- ->orderByDesc('total_num')
- ->get()
- ->take(10);
- // ->take(10);
- // Log::info($order);
- if (count($order) == 0) return $this->ok([]);
- $i = 0;
- foreach ($order as &$v) {
- $v['username'] = $v->users->nickname ?? '';
- $v['phone'] = $v->users->mobile ?? '';
- $v['ranking'] = ++$i;
- unset($v);
- }
- return $this->ok($order);
- }
- /**
- * bikeProfitRanking 车辆收益统计排行榜
- *
- * @return \Illuminate\Http\JsonResponse
- * @author Fx
- *
- */
- public function bikeProfitRanking(BikeFilter $bikeFilter)
- {
- $bikes = Bike::query()->filter($bikeFilter);
- $admin_id = Admin::user()->id;
- if (!Admin::isAdministrator()) {
- $area_ids = AdminUser::getAreaIdsByAdminId($admin_id);
- if (count($area_ids) !== 0) {
- $bikes = $bikes->whereIn('put_area_id', $area_ids);
- } else {
- $area_id = AdminUserArea::query()->where('admin_id', $admin_id)->first('area_id');
- $area_id = $area_id ?? 0;
- $bikes = $bikes->where('put_area_id', $area_id);
- }
- }
- $bikes = $bikes->get();
- $data = [];
- if (count($bikes) === 0) return $this->ok($data);
- foreach ($bikes as $k => $v) {
- $bike_insert_time = $v->total_money_time ? date('Y-m-d H:i:s', strtotime($v->total_money_time)) : date('Y-m-d H:i:s', strtotime($v->created_at));
- $days = Carbon::today()->diffInDays($bike_insert_time);
- $per_money = 0;
- if ($days != 0) {
- $per_money = round($v->total_money / $days, 2);
- }
- // $v['phone'] = $v->users->mobile ?? '';
- $data[] = [
- 'bike_no' => $v->bike_no ?? '',
- 'put_days' => $days,
- 'total_money' => $v->total_money,
- 'per_money' => $per_money
- ];
- $volume[$k] = $per_money; // 排序依据
- $edition[$k] = $v->bike_no ?? ''; // 排序人
- // $v['ranking'] = ++$i;
- unset($v);
- }
- array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data);
- if (count($data) > 10) {
- $res = array_slice($data, 0, 10);
- } else {
- $res = $data;
- }
- return $this->ok($res);
- }
- /**
- * totalUser 总用户数量统计
- *
- * @param string $area_id
- * @return array
- * @author Fx
- *
- */
- protected function totalUser($area_id = '')
- {
- $totalUser = [];
- $yesterday = Carbon::yesterday();
- $today = Carbon::today();
- $yesterdayNewUser = User::query();
- $todayNewUser = User::query();
- $total = User::query();
- if (!empty($area_id)) {
- $yesterdayNewUser = $yesterdayNewUser->where('register_area_id', $area_id);
- $todayNewUser = $todayNewUser->where('register_area_id', $area_id);
- $total = $total->where('register_area_id', $area_id);
- }
- $admin_id = Admin::user()->id;
- if (!Admin::isAdministrator()) {
- $area_ids = AdminUser::getAreaIdsByAdminId($admin_id);
- if (count($area_ids) !== 0) {
- $yesterdayNewUser = $yesterdayNewUser->whereIn('register_area_id', $area_ids);
- $todayNewUser = $todayNewUser->whereIn('register_area_id', $area_ids);
- $total = $total->whereIn('register_area_id', $area_ids);
- } else {
- $area_id = AdminUserArea::query()->where('admin_id', $admin_id)->first('area_id');
- $area_id = $area_id ?? 0;
- $yesterdayNewUser = $yesterdayNewUser->where('register_area_id', $area_id);
- $todayNewUser = $todayNewUser->where('register_area_id', $area_id);
- $total = $total->where('register_area_id', $area_id);
- }
- }
- //昨日新增用户
- $yesterdayNewUser = $yesterdayNewUser
- ->where('created_at', '>', $yesterday)
- ->where('created_at', '<', $today)
- ->count('id');
- //今日新增用户数
- $todayNewUser = $todayNewUser
- ->where('created_at', '>', $today)
- ->count('id');
- $total = $total->count('id');
- $userDifference = (int)$todayNewUser - (int)$yesterdayNewUser;
- $totalUser['total_num'] = $total;
- if ($userDifference < 0) {
- $totalUser['diff'] = '1'; // 表示下降
- } elseif ($userDifference === 0) {
- $totalUser['diff'] = '2'; // 表示无变化
- } else {
- $totalUser['diff'] = '3'; // 表示上升
- }
- $totalUser['difference'] = abs($userDifference);
- return $totalUser;
- }
- /**
- * totalOrder 总订单数量统计
- *
- * @param string $area_id
- * @return array
- * @author Fx
- *
- */
- protected function totalOrder($area_id = '')
- {
- $totalOrder = $this->orderStistics($area_id);
- unset($totalOrder['new_num']); // 删除多余得本日新增订单数
- return $totalOrder;
- }
- /**
- * newOrder 新订单统计
- *
- * @param string $area_id
- * @return array
- * @author Fx
- *
- */
- protected function newOrder($area_id = '')
- {
- $newOrder = $this->orderStistics($area_id);
- unset($newOrder['total_num']); // 删除多余得总订单数
- return $newOrder;
- }
- /**
- * orderStistics 订单数量统计
- *
- * @param string $area_id
- * @return array
- * @author Fx
- *
- */
- protected function orderStistics($area_id = '')
- {
- $totalOrder = [];
- $yesterday = Carbon::yesterday();
- $today = Carbon::today();
- $yesterdayOrderNum = Order::query();
- $todayOrderNum = Order::query();
- $total = Order::query();
- $yesterdayOrderRentNum = OrderRent::query();
- $todayOrderRentNum = OrderRent::query();
- $totalOrderRent = OrderRent::query();
- if (!empty($area_id)) {
- $yesterdayOrderNum = $yesterdayOrderNum->where('area_id', $area_id);
- $todayOrderNum = $todayOrderNum->where('area_id', $area_id);
- $total = $total->where('area_id', $area_id);
- $yesterdayOrderRentNum = $yesterdayOrderRentNum->where('area_id', $area_id);
- $todayOrderRentNum = $todayOrderRentNum->where('area_id', $area_id);
- $totalOrderRent = $totalOrderRent->where('area_id', $area_id);
- }
- $admin_id = Admin::user()->id;
- if (!Admin::isAdministrator()) {
- $area_ids = AdminUser::getAreaIdsByAdminId($admin_id);
- if (count($area_ids) !== 0) {
- $yesterdayOrderNum = $yesterdayOrderNum->whereIn('area_id', $area_ids);
- $todayOrderNum = $todayOrderNum->whereIn('area_id', $area_ids);
- $total = $total->whereIn('area_id', $area_ids);
- $yesterdayOrderRentNum = $yesterdayOrderRentNum->whereIn('area_id', $area_ids);
- $todayOrderRentNum = $todayOrderRentNum->whereIn('area_id', $area_ids);
- $totalOrderRent = $totalOrderRent->whereIn('area_id', $area_ids);
- } else {
- $area_id = AdminUserArea::query()->where('admin_id', $admin_id)->first('area_id');
- $area_id = $area_id ?? 0;
- $yesterdayOrderNum = $yesterdayOrderNum->where('area_id', $area_id);
- $todayOrderNum = $todayOrderNum->where('area_id', $area_id);
- $total = $total->where('area_id', $area_id);
- $yesterdayOrderRentNum = $yesterdayOrderRentNum->where('area_id', $area_id);
- $todayOrderRentNum = $todayOrderRentNum->where('area_id', $area_id);
- $totalOrderRent = $totalOrderRent->where('area_id', $area_id);
- }
- }
- // 昨日新订单数
- $yesterdayOrderNum = $yesterdayOrderNum
- ->where('pay_time', '>', $yesterday)
- ->where('pay_time', '<', $today)
- ->where('status', Order::STATUS_COMPLETE_ORDER)
- ->count('id');
- $yesterdayOrderRentNum = $yesterdayOrderRentNum
- ->where('pay_time', '>', $yesterday)
- ->where('pay_time', '<', $today)
- ->where('status', OrderRent::STATUS_COMPLETE_ORDER)
- ->count('id');
- // 今日新订单数
- $todayOrderNum = $todayOrderNum
- ->where('pay_time', '>', $today)
- ->where('status', Order::STATUS_COMPLETE_ORDER)
- ->count('id');
- $todayOrderRentNum = $todayOrderRentNum
- ->where('pay_time', '>', $today)
- ->where('status', OrderRent::STATUS_COMPLETE_ORDER)
- ->count('id');
- // 总订单数
- $total = $total
- ->where('status', Order::STATUS_COMPLETE_ORDER)
- ->count('id');
- $totalOrderRent = $totalOrderRent
- ->where('status', OrderRent::STATUS_COMPLETE_ORDER)
- ->count('id');
- $orderDifference = (int)$todayOrderNum - (int)$yesterdayOrderNum;
- $orderRentDifference = (int)$todayOrderRentNum - (int)$yesterdayOrderRentNum;
- $orderDifference += $orderRentDifference;
- $totalOrder['new_num'] = $todayOrderNum + $todayOrderRentNum;
- $totalOrder['total_num'] = $total + $totalOrderRent;
- if ($orderDifference < 0) {
- $totalOrder['diff'] = '1'; // 表示下降
- } elseif ($orderDifference === 0) {
- $totalOrder['diff'] = '2'; // 表示无变化
- } else {
- $totalOrder['diff'] = '3'; // 表示上升
- }
- $totalOrder['difference'] = abs($orderDifference);
- return $totalOrder;
- }
- /**
- * totalProfit 总收益数据统计
- *
- * @param string $area_id
- * @return array
- * @author Fx
- *
- */
- protected function totalProfit($area_id = '')
- {
- $totalProfit = [];
- $yesterday = Carbon::yesterday();
- $today = Carbon::today();
- $yesterdayProfit = Order::query();
- $todayProfit = Order::query();
- $total = Order::query();
- if (!empty($area_id)) {
- $yesterdayProfit = $yesterdayProfit->where('area_id', $area_id);
- $todayProfit = $todayProfit->where('area_id', $area_id);
- $total = $total->where('area_id', $area_id);
- }
- $admin_id = Admin::user()->id;
- if (!Admin::isAdministrator()) {
- $area_ids = AdminUser::getAreaIdsByAdminId($admin_id);
- if (count($area_ids) !== 0) {
- $yesterdayProfit = $yesterdayProfit->whereIn('area_id', $area_ids);
- $todayProfit = $todayProfit->whereIn('area_id', $area_ids);
- $total = $total->whereIn('area_id', $area_ids);
- } else {
- $yesterdayProfit = $yesterdayProfit->where('area_id', 0);
- $todayProfit = $todayProfit->where('area_id', 0);
- $total = $total->where('area_id', 0);
- }
- }
- // 昨日日收益
- $yesterdayProfit = $yesterdayProfit
- ->where('created_at', '>', $yesterday)
- ->where('created_at', '<', $today)
- ->where('status', Order::STATUS_COMPLETE_ORDER)
- ->sum('pay_money');
- // 今日收益
- $todayProfit = $todayProfit
- ->where('created_at', '>', $today)
- ->where('status', Order::STATUS_COMPLETE_ORDER)
- ->sum('pay_money');
- //总收益
- $total = $total
- ->where('status', Order::STATUS_COMPLETE_ORDER)
- ->sum('pay_money');
- $profitDifference = (float)$todayProfit - (float)$yesterdayProfit;
- $totalProfit['total_num'] = $total;
- $totalProfit['today_num'] = (float)$todayProfit;
- if ($profitDifference < 0) {
- $totalProfit['diff'] = '1'; // 下降
- } elseif ($profitDifference > 0) {
- $totalProfit['diff'] = '3'; // 上升
- } else {
- $totalProfit['diff'] = '2'; // 上升
- }
- $totalProfit['difference'] = abs($profitDifference);
- return $totalProfit;
- }
- public function userPhoneChart(Request $request)
- {
- $days = $request->get('days') ?? '';
- $area_id = $request->get('area_id') ?? '';
- if (empty($days)) return $this->error('缺少参数');
- //platform
- $platform = UserPhoneDetail::query();
- $userPhone = UserPhoneDetail::query();
- if (!empty($area_id)) {
- $platform = $platform->whereHas('user', function ($q) use ($area_id) {
- $q->where('register_area_id', $area_id);
- });
- $userPhone = $userPhone->whereHas('user', function ($q) use ($area_id) {
- $q->where('register_area_id', $area_id);
- });
- }
- switch ($days) {
- case 'today':
- $param_days = Carbon::today();
- break;
- case 'threeDays':
- $param_days = Carbon::today()->subDays(3);
- break;
- case 'sevenDays':
- $param_days = Carbon::today()->subDays(7);
- break;
- case 'fifteenDays':
- $param_days = Carbon::today()->subDays(15);
- break;
- case 'thirtyDays':
- $param_days = Carbon::today()->subDays(30);
- break;
- case 'oneMonth':
- $param_days = Carbon::today()->subDays(30);
- break;
- case 'sixMonth':
- $param_days = Carbon::today()->subMonths(6);
- break;
- default:
- return $this->error('参数错误');
- }
- $platform = $platform->where('created_at', '>', $param_days)
- ->where('platform', '!=', 'devtools')
- ->groupBy(['platform'])
- ->select('platform', DB::raw('count(id) as value'))
- ->get()
- ->toArray();
- $userPhone = $userPhone->where('created_at', '>', $param_days)
- ->groupBy(['model'])
- ->select('model', DB::raw('count(id) as number'))
- ->orderByDesc('number')
- ->limit(10)
- ->get()
- ->toArray();
- $total = UserPhoneDetail::query()->count('id');
- if (!empty($platform)) {
- foreach ($platform as &$v) {
- // $v['percent'] = round($v['number'] / $total * 100 ,2) .'%';
- $v['name'] = $v['platform'];
- }
- }
- if (!empty($userPhone)) {
- foreach ($userPhone as &$i) {
- $i['percent'] = (float)number_format($i['number'] / $total * 100, 2);
- }
- }
- return $this->ok(['platform' => $platform, 'userPhone' => $userPhone, 'total' => $total]);
- dd($userPhone);
- }
- /**
- * heatMap 热力图
- *
- * @param OrderFilter $orderFilter
- * @return \Illuminate\Http\JsonResponse
- * @author Fx
- *
- */
- public function heatMap(OrderFilter $orderFilter)
- {
- $today = Carbon::today();
- $order = Order::query()->filter($orderFilter)->where('created_at', '>', $today)->get();
- $data1 = [];
- if (!empty($order)) {
- foreach ($order as $v) {
- $location = json_decode($v->start_use_bike_location);
- $data1[] = ['lat' => $location->latitude, 'lng' => $location->longitude, 'count' => 30];
- }
- }
- $data = $data1;
- return $this->ok($data);
- }
- }
|