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