<?php
namespace App\Http\Controllers\Statistics;
use App\Http\Controllers\Statistics\StatisticsBaseController;
use Illuminate\Http\Request;
use App\Services\Statistics\CompanyService;
use App\Services\Statistics\JobsService;


class CompanyController extends StatisticsBaseController
{
    protected $companyService;
    protected $jobsService;

    /**
     * CompanyController constructor.
     */
    public function __construct(CompanyService $companyService, JobsService $jobsService)
    {
        $this->companyService = $companyService;
        $this->jobsService    = $jobsService;
    }
    public function getCompanyDate($start_time, $end_time, $subsite_id)
    {
        //企业数量(过滤审核未通过的企业)
        $where = array(array('utype','=',1),array('audit','<>',3));
        if ($subsite_id !='-1') {
            $where[] = array('subsite_id','=',$subsite_id);
        }
        $all_company_num = $this->companyService->getCompanyNums($where);

        $map = $where;
        $map[] = array('created_at','>=',$start_time);
        $map[] = array('created_at','<=',$end_time);
        $current_company_num = $this->companyService->getCompanyNums($map);

        //职位数量(前台可以看的职位 - 过滤审核失败的企业)
        $job_where = array(
            array('valid','=','1'),
            //array('display','=',1)
        );
        if ($subsite_id != -1) {
            $job_where[] = array('subsite_id','=',$subsite_id);
        }
        if (config('aix.companyset.comset.show_set.jobs_display')==1) {
            $job_where[] = array('audit','=',1);
        } else {
            $job_where[] = array('audit','<>',3);
        }
        $job_map = $job_where;
        $job_map[] = array('created_at','>=',$start_time);
        $job_map[] = array('created_at','<=',$end_time);

        $all_jobs_num = $this->jobsService->getJobNum($job_where, $where);
        $current_jobs_num = $this->jobsService->getJobNum($job_map, $where);

        //招聘人数
        $all_job_amount = $this->jobsService->getJobNumsByGroup($job_where, $where, 'sum(amount) as job_amount', '');
        $current_job_amount = $this->jobsService->getJobNumsByGroup($job_map, $where, 'sum(amount) as job_amount', '');

        return array(
            'all_company_num'    => $all_company_num,
            'current_company_num'=> $current_company_num,
            'all_jobs_num'       => $all_jobs_num,
            'current_jobs_num'   => $current_jobs_num,
            'all_job_amount'     => $all_job_amount[0]['job_amount']?$all_job_amount[0]['job_amount']:0,
            'current_job_amount' => $current_job_amount[0]['job_amount']?$current_job_amount[0]['job_amount']:0,
        );
    }

    public function basicAnalysis(Request $request)
    {
        $subsite_id = session('caiqing_susbite_id');
        if ($subsite_id === null) {
            $subsite_id = -1;
        }
        //时间过滤
        $date_aprams = $this->getDateDetail($request->all());
        $start_time  = date('Y-m-d H:i:s', strtotime($date_aprams['start_date']));
        $end_time    = date('Y-m-d H:i:s', strtotime($date_aprams['end_date'].' +1 day')-1);

        $company_data = $this->getCompanyDate($start_time, $end_time, $subsite_id);

        //企业过滤条件 - 过滤审核失败的企业
        $where = [
            ['utype','=',1],
            //['user_status','=',1],
            ['audit','<>',3],
            ['created_at','>=',$start_time],
            ['created_at','<=',$end_time]
        ];
        if ($subsite_id !='-1') {
            $where[] = ['subsite_id','=',$subsite_id];
        }

        //分类信息(企业性质、企业规模)
        $cate_filter = ['AIX_company_type' => 100, 'AIX_scale'=>100, 'AIX_trade'=>100];
        $cates = $this->companyService->getCategories($cate_filter);

        //按公司性质统计企业数量
        $nature_fields = 'count(id) as num, nature';
        $nature_group = 'nature';
        $nature_rst = $this->companyService->getCompanyNumsGroup($where, $nature_fields, $nature_group);
        $nature_data = [];
        $nature_names = [];
        if ($nature_rst) {
            foreach ($nature_rst as $k => $v) {
                $nature_data[] = $v['num'];
                if ($v['nature'] == 0) {
                    $nature_names[] = '没有填写';
                } else {
                    if (array_has($cates['AIX_company_type'], $v['nature'])) {
                        $nature_names[] = $cates['AIX_company_type'][$v['nature']]['demand'];
                    } else {
                        $nature_names[] = '';
                    }
                }
            }
        }

        //按公司规模统计企业数量
        $scale_fields = 'count(id) as num, scale';
        $scale_group = 'scale';
        $scale_rst = $this->companyService->getCompanyNumsGroup($where, $scale_fields, $scale_group);
        $scale_data = [];
        $scale_names = [];
        if ($scale_rst) {
            foreach ($scale_rst as $k => $v) {
                $scale_data[] = $v['num'];
                if ($v['scale'] == 0) {
                    $scale_names[] = '没有填写';
                } else {
                    if (array_has($cates['AIX_scale'], $v['scale'])) {
                        $scale_names[] = $cates['AIX_scale'][$v['scale']]['demand'];
                    } else {
                        $scale_names[] = '';
                    }
                }
            }
        }

        //按行业分布统计企业数量
        $trade_fields = 'count(id) as num, trade';
        $trade_group = 'trade';
        $trade_rst = $this->companyService->getCompanyNumsGroup($where, $trade_fields, $trade_group);
        $trade_data = [];
        $trade_names = [];
        if ($trade_rst) {
            foreach ($trade_rst as $k => $v) {
                $trade_data[] = $v['num'];
                if ($v['trade'] == 0) {
                    $trade_names[] = '没有填写';
                } else {
                    if (array_has($cates['AIX_trade'], $v['trade'])) {
                        $trade_names[] = $cates['AIX_trade'][$v['trade']]['demand'];
                    } else {
                        $trade_names[] = '';
                    }
                }
            }
        }

        $return_data = [
            'all_company_num'=>$company_data['all_company_num'],
            'current_company_num'=>$company_data['current_company_num'],
            'all_jobs_num'=>$company_data['all_jobs_num'],
            'current_jobs_num'=>$company_data['current_jobs_num'],
            'all_job_amount'     => $company_data['all_job_amount'],
            'current_job_amount' => $company_data['current_job_amount'],
            'date_aprams'  => $date_aprams,
            'action_name'  => app('request')->route()->getName(),
            'nature_data'  => $nature_data,
            'nature_names' => $nature_names,
            'scale_data'   => $scale_data,
            'scale_names'  => $scale_names,
            'trade_data'   => $trade_data,
            'trade_names'  => $trade_names,
        ];
        return view('statistics.app.company.basic_analysis', $return_data);
    }

    public function jobAnalysis(Request $request)
    {
        $subsite_id = session('caiqing_susbite_id');
        if ($subsite_id === null) {
            $subsite_id = -1;
        }
        //时间过滤
        $date_aprams = $this->getDateDetail($request->all());
        $start_time  = date('Y-m-d H:i:s', strtotime($date_aprams['start_date']));
        $end_time    = date('Y-m-d H:i:s', strtotime($date_aprams['end_date'].' +1 day')-1);

        $company_data = $this->getCompanyDate($start_time, $end_time, $subsite_id);

        $cate_filter = ['AIX_trade' => 100,'AIX_experience' => 100, 'AIX_education'=>100];
        $cates = $this->companyService->getCategories($cate_filter);

        //职位过滤条件
        $job_where = array(
            array('valid','=','1'),
            //array('display','=',1),
            array('created_at','>=',$start_time),
            array('created_at','<=',$end_time)
        );
        $trade_where = array(
            array('j.valid','=','1'),
            //array('j.display','=',1),
            array('j.created_at','>=',$start_time),
            array('j.created_at','<=',$end_time)
        );
        if (config('aix.companyset.comset.show_set.jobs_display')==1) {
            $job_where[] = array('audit','=',1);
            $trade_where[] = array('j.audit','=',1);
        } else {
            $job_where[] = array('audit','<>',3);
            $trade_where[] = array('j.audit','<>',3);
        }
        $company_where = [['utype','=',1],['audit','<>',3]/*'user_status'=>1*/];
        if ($subsite_id != -1) {
            $job_where[] = ['subsite_id','=',$subsite_id];
            $trade_where[] = ['c.subsite_id','=',$subsite_id];
            $company_where[] = ['subsite_id','=',$subsite_id];
        }

        //行业需求(行业数量靠前的职位数量)
        $trade_where[] = ['c.utype','=',1];
        $trade_where[] = ['c.user_status','=',1];
        $trade_fields = 'count(j.id) as num, c.trade';
        $trade_group = 'c.trade';
        $trade_order = 'count(j.id) desc';
        $trade_rst = $this->jobsService->getJobNumByTradeGroup($trade_where, $trade_fields, $trade_group, $trade_order, '10');
        $trade_data = [];
        if ($trade_rst) {
            foreach ($trade_rst as $k => $v) {
                $trade_name_s = '';
                if ($v->trade == 0) {
                    $trade_name_s = '没有填写';
                } else {
                    if (array_has($cates['AIX_trade'], $v->trade)) {
                        $trade_name_s = $cates['AIX_trade'][$v->trade]['demand'];
                    } else {
                        $trade_name_s = '';
                    }
                }
                $trade_data[] = array(
                    'num'=> $v->num,
                    'trade'=> $v->trade,
                    'name'=> $trade_name_s,
                );
            }
        }

        //职位大类(数量靠前职位大类的薪资平均值)
        $topclass_fields = 'count(id) as num, sum(amount) as job_amount,topclass, sum((if(wage_min=0 && wage_max>0, wage_max, wage_min)+if(wage_max=0 && wage_min>0, wage_min, wage_max))/2) as total_wage';
        $topclass_group = 'topclass';
        $topclass_order = 'count(id) desc';
        $topclass_rst = $this->jobsService->getAvgWageByGroup($job_where, $company_where, $topclass_fields, $topclass_group, $topclass_order, 10);
        $topclass_data = [];
        $topclass_amount = [];
        $topclass_wage = [];
        $topclass_name  = [];
        if ($topclass_rst) {
            foreach ($topclass_rst as $k => $v) {
                $topclass_wage[] = round(($v['total_wage']/$v['num']), 2);
                $topclass_data[] = $v['num'];
                $topclass_amount[] = $v['job_amount'];
                $topclass_name[]  = $v['name']?$v['name']:'无要求';
            }
        }

        //职位小类(数量靠前职位小类的薪资平均值)
        $subclass_fields = 'count(id) as num, sum(amount) as job_amount, category, sum((if(wage_min=0 && wage_max>0, wage_max, wage_min)+if(wage_max=0 && wage_min>0, wage_min, wage_max))/2) as total_wage';
        $subclass_group = 'category';
        $subclass_order = 'count(id) desc';
        $subclass_rst = $this->jobsService->getAvgWageByGroup($job_where, $company_where, $subclass_fields, $subclass_group, $subclass_order, 10);
        $subclass_data = [];
        $subclass_amount = [];
        $subclass_wage = [];
        $subclass_name  = [];
        if ($subclass_rst) {
            foreach ($subclass_rst as $k => $v) {
                $subclass_wage[]   = round(($v['total_wage']/$v['num']), 2);
                $subclass_data[]   = $v['num'];
                $subclass_amount[] = $v['job_amount'];
                $subclass_name[]   = $v['name'];
            }
        }


        //学历分布(按职位学历要求分组统计职位数量)
        $edu_fields = 'count(id) as num, education';
        $edu_group = 'education';
        $edu_order  = 'education asc';
        $edu_rst = $this->jobsService->getJobNumsByGroup($job_where, $company_where, $edu_fields, $edu_group, $edu_order);
        $edu_data = [];
        $edu_names = [];
        if ($edu_rst) {
            foreach ($edu_rst as $k => $v) {
                $edu_data[] = $v['num'];
                if ($v['education'] == 0) {
                    $edu_names[] = '无要求';
                } else {
                    if (array_has($cates['AIX_education'], $v['education'])) {
                        $edu_names[] = $cates['AIX_education'][$v['education']]['demand'];
                    } else {
                        $edu_names[] = '无要求';
                    }
                }
            }
        }

        //工作经验(按职位工作经验要求分组统计职位数量)
        $exp_fields = 'count(id) as num, experience';
        $exp_group = 'experience';
        $exp_rst = $this->jobsService->getJobNumsByGroup($job_where, $company_where, $exp_fields, $exp_group, 'experience asc');
        $exp_data = [];
        $exp_names = [];
        if ($exp_rst) {
            foreach ($exp_rst as $k => $v) {
                $exp_data[] = $v['num'];
                if ($v['experience'] == 0) {
                    $exp_names[] = '无要求';
                } else {
                    if (array_has($cates['AIX_experience'], $v['experience'])) {
                        $exp_names[] = $cates['AIX_experience'][$v['experience']]['demand'];
                    } else {
                        $exp_names[] = '无要求';
                    }
                }
            }
        }
        $return_data = [
            'date_aprams'  => $date_aprams,
            'all_company_num'=>$company_data['all_company_num'],
            'current_company_num'=>$company_data['current_company_num'],
            'all_jobs_num'=>$company_data['all_jobs_num'],
            'current_jobs_num'=>$company_data['current_jobs_num'],
            'all_job_amount'     => $company_data['all_job_amount'],
            'current_job_amount' => $company_data['current_job_amount'],
            'action_name'  => app('request')->route()->getName(),
            'trade_data'   => $trade_data,
            'topclass_data'=> $topclass_data,
            'topclass_amount' => $topclass_amount,
            'topclass_name'=> $topclass_name,
            'topclass_wage'=> $topclass_wage,
            'subclass_data'=> $subclass_data,
            'subclass_name'=> $subclass_name,
            'subclass_wage'=> $subclass_wage,
            'subclass_amount' => $subclass_amount,
            'edu_data'     => $edu_data,
            'edu_names'    => $edu_names,
            'exp_data'     => $exp_data,
            'exp_names'    => $exp_names,
        ];
        return view('statistics.app.company.job_analysis', $return_data);
    }


}