DashboardController.php 12.1 KB
<?php

namespace App\Http\Controllers\Backend;


use App\Http\Controllers\Controller;
use App\Modules\Models\Customer\Customer;
use App\Modules\Models\DayIncome\DayIncome;
use App\Modules\Models\GuideRecord\GuideRecord;
use App\Modules\Models\Machine\Machine;
use App\Modules\Models\Production\Production;
use App\Modules\Models\Rent\Rent;
use App\Modules\Models\Settlement\Finance;
use App\Modules\Models\Settlement\Settlement;
use App\Modules\Models\Spot\Spot;
use App\Access\Model\User\User;

/**
 * Class DashboardController.
 */
class DashboardController extends Controller
{
    /**
     * @return \Illuminate\View\View
     */
    public function index()
    {

        $time = date("Y-m-d");
        //7天日期
        $end = date("Y-m-d", strtotime("$time -1 day"));
        $start = date("Y-m-d", strtotime("$time -7 day"));

        $firstday = date('Y-m-01', strtotime("$time -1 month")); //上月月初
        $lastday = date('Y-m-d', strtotime("$firstday +1 month -1 day"));//上月月末

        $everyday_ordertime = date("Y-m-d");

        $orderstart_time = $everyday_ordertime . ' 00:00:00';
        $orderend_time = $everyday_ordertime . ' 23:59:59';

        $x = [];
        $m_x = [];
        $m_data = [];
        $m_data1 = [];
        for ($i = $start; $i <= $end; $i = date("Y-m-d", strtotime("$i +1 day"))) {
            $x[] = $i;
            $m_x [$i] = 0;
        }

        //session_id 对应的是用户表的id

        $session_id = session()->get('login_web_59ba36addc2b2f9401580f014c7f58ea4e30989d');
        $res = User::find($session_id)->toArray();
        $type_business_id = $res['business_id']; //前台根据该数值来判断展示的 折线图

        //区分到底是商户还是管理员

        if ($res['business_id'] == 0) {
            $where = [
                ['dayincome.day', '>=', $start],
                ['dayincome.day', '<=', $end],
            ];
            $where1 = [
                ['dayincome.day', '>=', $firstday],
                ['dayincome.day', '<=', $lastday],];


        } else {
            $where = [
                ['dayincome.day', '>=', $start],
                ['dayincome.day', '<=', $end],
                ['dayincome.business_id', $type_business_id],
            ];
            $where1 = [
                ['dayincome.day', '>=', $firstday],
                ['dayincome.day', '<=', $lastday],
                ['dayincome.business_id', $type_business_id],
            ];

        }
        $bus_id = DayIncome::select('*')
            ->where($where)
            ->orderBy('day')
            ->get()
            ->toArray();


        foreach ($bus_id as $bus_ids) {
            $m_data[$bus_ids['day']] = $bus_ids['total'] + $bus_ids['guide_total'];
        }

        $m_res = array_merge($m_x, $m_data);


        foreach ($m_res as $m_ress) {
            $m_data1[] = $m_ress;
        }

        //商户当天收益
        $m_everyday_order = Production::select('rent.real_total')
            ->leftjoin('rent', 'production.rent_id', '=', 'rent.id')
            ->where('production.return_time', '>=', $orderstart_time)
            ->where('production.return_time', '<=', $orderend_time)
            ->where('production.is_return', 1)
            ->where('rent.business_id', $type_business_id)
            ->sum('rent.real_total');

        //商户微导览当天的

//        $m_guide_order=GuideRecord::select('guide_record.real_total')
//            ->where('guide_record.pay_time', '>=', $orderstart_time)
//            ->where('guide_record.pay_time','<=',$orderend_time)
//            ->where('guide_record.is_pay',1)
//            ->sum('guide_record.real_total');
//
//         //商户上一个月的收入
//


        //月份收入
        $m_everymonth = DayIncome::where($where1)
            ->selectRaw('sum(dayincome.total) as a, sum(dayincome.guide_total)as b')
            ->get()
            ->toArray();
        $sum_e_m = $m_everymonth[0]['a'] + $m_everymonth[0]['b'];

        //管理员的图表

        $spot = Spot::select('id', 'spotname')->get()->toArray();
        //每天条件
        $info = DayIncome::select('dayincome.spot_id', 'dayincome.business_id', 'dayincome.total', 'dayincome.day', 'spot.spotname', 'dayincome.guide_total')
            ->leftjoin('spot', 'dayincome.spot_id', "=", "spot.id")
            ->where($where)
            ->orderBy('dayincome.day')
            ->get()
            ->toArray();
        //所有景区每天
//        $everyday=DayIncome::where('day',$time)
//             ->sum('total');
        //所有景区的每天租借的收益
        $everyday = Production::select('rent.real_total')
            ->leftjoin('rent', 'production.rent_id', '=', 'rent.id')
            ->where('production.return_time', '>=', $orderstart_time)
            ->where('production.return_time', '<=', $orderend_time)
            ->where('production.created_at', '>=', $orderstart_time)
            ->where('production.created_at', '<=', $orderend_time)
            ->where('production.is_return', 1)
            ->sum('rent.real_total');
        //所有景区每天的同游共听讲解
        $everday_guide = GuideRecord::select('guide_record.real_total')
            ->where('guide_record.pay_time', '>=', $orderstart_time)
            ->where('guide_record.pay_time', '<=', $orderend_time)
            ->where('guide_record.is_pay', 1)
            ->sum('guide_record.real_total');

        $everyday_total = $everyday + $everday_guide;
        //所有景区每月

        $everymonth = DayIncome::Select('total')
            ->where($where)
            ->sum('total');

        //订单数目每天租借
//        $everyday_order_machine =Production::select('id')
//            ->where('production.return_time', '>=', $orderstart_time)
//            ->where('production.return_time', '<=', $orderend_time)
//            ->where('production.is_return', 1)
//            ->count('id');

        $everyday_order_machine = Rent::select('id')
            ->where('rent.pay_time', '>=', $orderstart_time)
            ->where('rent.pay_time', '<=', $orderend_time)
            ->where('rent.is_pay', 1)
            ->where('rent.is_cancel', 0)
            ->count();
        //同游共听的每天订单

        $everday_guide_order = GuideRecord::select('guide_record.real_total')
            ->where('guide_record.pay_time', '>=', $orderstart_time)
            ->where('guide_record.pay_time', '<=', $orderend_time)
            ->where('guide_record.is_pay', 1)
            ->count('id');

        $everyday_order = $everyday_order_machine + $everday_guide_order;
        //订单数目每月

        $everymonth_order_machine = Production::select('id')
            ->where('production.return_time', '>=', $firstday)
            ->where('production.return_time', '<=', $lastday)
            ->where('production.is_return', 1)
            ->count('id');
        //同游共听上月订单 数量
        $everymonth_guide_order = GuideRecord::select('guide_record.real_total')
            ->where('guide_record.pay_time', '>=', $firstday)
            ->where('guide_record.pay_time', '<=', $lastday)
            ->where('guide_record.is_pay', 1)
            ->count('id');

        $everymonth_order = $everymonth_order_machine + $everymonth_guide_order;

        //游客数量

        $everyday_cus = Customer::select("id")
            ->where('created_at', '>=', $orderstart_time)
            ->where('created_at', '<=', $orderend_time)
            ->count();

        $everymonth_cus = Customer::select("id")
            ->where('created_at', '>=', $firstday)
            ->where('created_at', '<=', $lastday)
            ->count();

        $total_cus = Customer::select("id")->count();
        $money = [];
        $data1 = [];
        $data3 = [];
        $data4 = [];
        $data5 = [];
        $sum = [];

        $y = [];
        $avg = [];
        $teo = Count($spot);
        foreach ($info as $infos) {
            $money[$infos['spotname'] . $infos['day']] = ($infos['total'] + $infos['guide_total']) * 0.01;
        }

        foreach ($data4 as $key => $su) {
            $sum[$key] = array_sum($su);
        }


        foreach ($spot as $spots) {
            for ($i = $start; $i <= $end; $i = date("Y-m-d", strtotime("$i +1 day"))) {
                $data1[] = $spots['spotname'] . $i;
            }
        }

        foreach ($data1 as $data11) {
            $data3[$data11] = 0;
        }

        $res = array_merge($data3, $money);
        foreach ($res as $key => $re) {
            foreach ($spot as $spots) {
                if (substr($key, 0, -10) == $spots['spotname']) {
                    $y[$spots['spotname']][] = $re;
                }

            }
        }

        foreach ($res as $key => $ag) {
            foreach ($x as $xs) {
                if (substr($key, -10) == $xs) {

                    $data5[$xs][] = $ag;

                }
            }
        }


        foreach ($y as $key => $su) {
            $sum[$key] = array_sum($su);
        }


        foreach ($data5 as $key => $av) {

            $avg[] = round(array_sum($av) / $teo, 3);
        }

        $dataStatusOn = [];
        $dataStatusOff = [];
        $resStatus = json_decode($this->getMachineStatus(), true);
        for ($ind = -7; $ind < 0; $ind++) {
            $daOn = ['name' => date('H:i:s', time() + $ind), 'y' => $resStatus['on_line']];
            $daOff = ['name' => date('H:i:s', time() + $ind), 'y' => $resStatus['off_line']];
            array_push($dataStatusOn, $daOn);
            array_push($dataStatusOff, $daOff);
        }

        return view('backend.dashboard', [
            'x' => $x,
            'y' => $y,
            'avg' => $avg,
            'sum' => $sum,
            'everydaytotal' => $everyday_total,   //总后台的每天收益
            'everymonthtotal' => $sum_e_m,      //总后台上月收益
            'everydayorder' => $everyday_order,       //总后台当天订单数
            'everymonthorder' => $everymonth_order,      //上月订单数量
            'everyday_cus' => $everyday_cus,
            'everymonth_cus' => $everymonth_cus,
            'total_cus' => $total_cus,
            'type_business_id' => $type_business_id,
            'm_data1' => $m_data1,
            'm_everyday_order' => $m_everyday_order,
            'm_everymonth' => $sum_e_m,
            'dataStatusOn' => $dataStatusOn,
            'dataStatusOff' => $dataStatusOff
        ]);
    }

    //每天不同景区的总价格
    public function everydayTotal()
    {

        $time = date('Y-m-d');

        if (!empty($_SERVER['argv'][1])) {
            $time = $_SERVER['argv'][1];
        }

        $day = date("Y-m-d", strtotime("$time -1 day"));

        $start_time = $day . ' 00:00:00';
        $end_time = $day . ' 23:59:59';


        //昨天的钱数
        $info = Production::select('rent.spot_id', 'rent.business_id', 'rent.real_total', 'production.return_time')
            ->leftJoin('rent', 'production.rent_id', '=', 'rent.id')
            ->where('production.return_time', '>=', $start_time)
            ->where('production.return_time', '<=', $end_time)
            ->where('production.is_rent', 1)
            ->get()
            ->toArray();

        $data = [];


        if (!empty($info)) {
            for ($i = 0; $i < count($info); $i++) {
                if (!isset($data[$info[$i]['spot_id']]['real_total'])) {
                    $data[$info[$i]['spot_id']]['real_total'] = 0;
                }
                $data[$info[$i]['spot_id']]['real_total'] += $info[$i]['real_total'];
            }
        }

        $insert_data = [];
        $spots = Spot::select('*')->get()->toArray();
        foreach ($spots as $k => $v) {
            $insert_data[$k]['day'] = $day;
            $insert_data[$k]['business_id'] = (int)$v['business_id'];
            $insert_data[$k]['spot_id'] = (int)$v['id'];
            $insert_data[$k]['total'] = empty($income_data[$v['id']]['consume']) ? 0 : $income_data[$v['id']]['consume'];
        }
        $res = DayIncome::insert($insert_data);

    }

    public function getMachineStatus()
    {
        $onCout = Machine::where('life', 1)->get()->count();
        $offCout = Machine::where('life', 0)->get()->count();
        return json_encode(['now_time' => date('H:i:s'), 'on_line' => $onCout, 'off_line' => $offCout]);
    }
}