| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358 | <?phpnamespace 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);    }}
 |