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