123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494 |
- <?php
- namespace App\Http\Controllers\Statistics;
- use App\Admin\Exports\Caiqing\TechLevelExport;
- use App\Http\Controllers\Statistics\StatisticsBaseController;
- use Illuminate\Http\Request;
- use App\Services\Statistics\CompanyService;
- use App\Services\Statistics\JobsService;
- use App\Services\Statistics\ResumeService;
- use App\Services\Statistics\MemberService;
- use App\Services\Statistics\CategoryService;
- use App\Services\Common\SearchService;
- use Illuminate\Support\Collection;
- use App\Admin\Exports\Caiqing\OverallExport;
- use App\Admin\Exports\Caiqing\JobGapExport;
- use App\Admin\Exports\Caiqing\ResumeGapExport;
- use App\Admin\Exports\Caiqing\IndustryExport;
- use App\Admin\Exports\Caiqing\TradeExport;
- use App\Admin\Exports\Caiqing\CompanyTypeExport;
- use App\Admin\Exports\Caiqing\TypeExport;
- use App\Admin\Exports\Caiqing\EducationExport;
- use App\Admin\Exports\Caiqing\PersonTypeExport;
- use App\Admin\Exports\Caiqing\AgeExport;
- class DemandController extends StatisticsBaseController
- {
- protected $jobsService;
- protected $resumeService;
- protected $memberService;
- protected $companyService;
- protected $apply_state;
- protected $searchService;
- protected $categoryService;
- /**
- * DemandController constructor.
- */
- public function __construct(JobsService $jobsService, ResumeService $resumeService, MemberService $memberService, CompanyService $companyService, SearchService $searchService, CategoryService $categoryService)
- {
- $this->jobsService = $jobsService;
- $this->resumeService = $resumeService;
- $this->memberService = $memberService;
- $this->companyService = $companyService;
- $this->searchService = $searchService;
- $this->categoryService = $categoryService;
- $this->apply_state = ['1' => '合适', '2' => '不合适', '3' => '待定', '4' => '未接通'];
- }
- public function index(Request $request)
- {
- $subsite_id = session('caiqing_susbite_id');
- if ($subsite_id === null) {
- $subsite_id = -1;
- }
- //近1年的起始时间
- $end_date = date('Y-m', time());
- $end_time = date("Y-m-d H:i:s", strtotime("$end_date +1 month")-1);
- $start_time = date("Y-m-d H:i:s", strtotime("$end_date -11 month"));
- //需求人数(职位人数总和)
- $job_where = [
- ['created_at','<=',$end_time],
- ['created_at','>=',$start_time],
- ['valid','=',1],
- ['display','=',1]
- ];
- if (config('aix.companyset.comset.show_set.jobs_display')==1) {
- $job_where[] = array('audit','=',1);
- } else {
- $job_where[] = array('audit','<>',3);
- }
- $company_where = ['utype'=>1,'user_status'=>1];
- if ($subsite_id != -1) {
- $company_where[] = ['subsite_id','=',$subsite_id];
- }
- $job_group = "create_month";
- $job_fields = 'count(id),sum(amount) as num,date_format(created_at, "%y-%m") as create_month';
- $job_order = 'create_month asc';
- $jobs_rst = $this->jobsService->getJobNumsByGroup($job_where, $company_where, $job_fields, $job_group, $job_order);
- $jobs_res = [];
- if ($jobs_rst) {
- foreach ($jobs_rst as $k => $v) {
- $jobs_res[$v['create_month']] = $v['num']?$v['num']:0;
- }
- }
- //求职人数(简历数量)
- $resume_where = [
- ['created_at', '<=', $end_time],
- ['created_at', '>=', $start_time],
- ];
- if (config('aix.personal_set.per_set.show_set.resume_display')=='1') {
- $resume_where[] = array('audit','=','2');
- } else {
- $resume_where[] = array('audit','<>','0');
- }
- $member_where = array(
- ['utype','=',2],
- ['status','=',1]
- );
- if ($subsite_id != -1) {
- $member_where[] = ['subsite_id','=',$subsite_id];
- }
- $resume_group = "create_month";
- $resume_fields = 'count(id) as num,date_format(created_at, "%y-%m") as create_month';
- $resume_order = 'create_month asc';
- $resume_rst = $this->resumeService->getResumeNumsByGroup($resume_where, $member_where, $resume_fields, $resume_group, $resume_order);
- //求人倍率(需求人数/求职人数)
- $start_date = date("Y-m", strtotime($start_time));
- $date_arr = [];
- $multiple = [];
- $job_num = [];
- $resume_num = [];
- for ($i=0; $i<12; $i++) {
- $start = date("y.n", strtotime($start_date));
- $s_date = date("y-m", strtotime($start_date));
- $date_arr[] = $start;
- if (!array_has($jobs_res, $s_date)) {
- $job_num[$start] = 0;
- } else {
- $job_num[$start] = $jobs_res[$s_date];
- }
- if (!array_has($resume_rst, $s_date)) {
- $resume_num[$start] = 0;
- } else {
- $resume_num[$start] = $resume_rst[$s_date];
- }
- $jnum = $job_num[$start];
- $rnum = $resume_num[$start];
- if ($jnum==0 || $rnum==0) {
- $multiple[$start] = 0;
- } else {
- $multiple[$start] = sprintf("%.2f", (int)$jnum/(int)$rnum);
- }
- $start_date = date("Y-m", strtotime("$start_date +1 month"));
- }
- $return_data = [
- 'jobs_data' => $job_num,
- 'resume_data' => $resume_num,
- 'multiple' => $multiple,
- 'date_arr' => $date_arr,
- 'job_total' => array_sum($job_num),
- 'resume_total'=> array_sum($resume_num),
- ];
- if ($request->input('isExcel')==1) {
- $data = [];
- if ($date_arr) {
- foreach ($date_arr as $k => $v) {
- $job_amount = array_has($job_num, $v)?$job_num[$v]:'0';
- $resume_amount = array_has($resume_num, $v)?$resume_num[$v]:'0';
- $multiple = '0';
- if ($job_amount==0 || $resume_amount==0) {
- $multiple = '0';
- } else {
- $multiple = sprintf("%.2f", (int)$job_amount/(int)$resume_amount);
- }
- $data[] = ['date_time'=>$v,'job_num'=>$job_amount.'','resume_num'=>$resume_amount.'','multiple'=>$multiple];
- }
- //合计
- $all_multiple = 0;
- if ($resume_num > 0) {
- $all_multiple = sprintf("%.2f", (int)array_sum($job_num)/(int)array_sum($resume_num));
- }
- $data[] = ['date_time'=>'合计','job_num'=>array_sum($job_num).'','resume_num'=>array_sum($resume_num).'','multiple'=>$all_multiple];
- }
- //导出文件
- $export = new OverallExport('总体分析 - 近一年的供求情况');
- $c = new Collection($data);
- $export->setCustomerData($c)->export();
- } else {
- return view('statistics.app.demand.basic_analysis', $return_data);
- }
- }
- public function compareEducation(Request $request)
- {
- $subsite_id = session('caiqing_susbite_id');
- if ($subsite_id === null) {
- $subsite_id = -1;
- }
- //时间过滤
- $date_aprams = $this->getDateParams($request->all());
- $start_time = date('Y-m-d H:i:s', strtotime($date_aprams['start_year'].'-'.$date_aprams['start_month']));
- $EndDate = date('Y-m-d H:i:s', strtotime($date_aprams['end_year'].'-'.$date_aprams['end_month']));
- $end_time = date('Y-m-d H:i:s', strtotime("$EndDate +1 month")-1);
- //获取文化程度数据 + 无要求
- $cates = $this->companyService->getCategories(['AIX_education'=>100]);
- $edu_cates = [];
- if (array_has($cates, 'AIX_education')) {
- $edu_cates = $cates['AIX_education'];
- $edu_cates['0'] = ['id'=>0, 'demand'=>'无要求'];
- }
- //获取需求信息
- $job_where = array(
- array('valid','=','1'),
- array('display','=',1),
- array('created_at','>=',$start_time),
- array('created_at','<=',$end_time)
- );
- if (config('aix.companyset.comset.show_set.jobs_display')==1) {
- $job_where[] = array('audit','=',1);
- } else {
- $job_where[] = array('audit','<>',3);
- }
- $company_where = ['utype'=>1,'user_status'=>1];
- if ($subsite_id != -1) {
- $job_where[] = ['subsite_id','=',$subsite_id];
- $company_where[] = ['subsite_id','=',$subsite_id];
- }
- $edu_fields = 'sum(amount) 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);
- $job_data = [];
- if ($edu_rst) {
- foreach ($edu_rst as $k => $v) {
- $job_data[$v['education']] = $v['num'];
- }
- }
- //获取求职人数
- $member_where = [
- ['m.utype','=',2],
- ['m.status','=',1],
- ['r.created_at','>=',$start_time],
- ['r.created_at','<=',$end_time]
- ];
- if ($subsite_id !='-1') {
- $member_where[] = ['m.subsite_id','=',$subsite_id];
- }
- $edu_fields = 'count(r.id) as num, mi.education,mi.education_cn';
- $edu_group = 'mi.education';
- $where_str = 'm.deleted_at IS NULL AND mi.deleted_at IS NULL AND r.deleted_at IS NULL';
- if (config('aix.personal_set.per_set.show_set.resume_display')=='1') {
- $member_where[] = array('r.audit','=','2');
- } else {
- $member_where[] = array('r.audit','<>','0');
- }
- //学历分布
- $resume_rst = $this->memberService->getJobSeekersByGroup($member_where, $where_str, $edu_fields, $edu_group);
- $resume_data = $resume_rst->pluck('num', 'education')->toArray();
- $table_data = [];
- if ($edu_cates) {
- foreach ($edu_cates as $k => $v) {
- $job_num = array_has($job_data, $k)?$job_data[$k]:0;
- $resume_num = array_has($resume_data, $k)?$resume_data[$k]:0;
- if ($resume_num==0 || $job_num==0) {
- $rate = 0;
- } else {
- $rate = $resume_num>0?sprintf("%.2f", (int)$job_num/(int)$resume_num):'0';
- }
- $table_data[] = ['education'=>$k,'education_cn'=>$v['demand'], 'job_num'=>$job_num?$job_num:0, 'resume_num'=>$resume_num?$resume_num:0, 'rate'=>$rate];
- }
- }
- $return_data = [
- 'date_aprams' => $date_aprams,
- 'action_name' => app('request')->route()->getName(),
- 'data' => $table_data,
- 'resume_total' => array_sum($resume_data),
- 'job_total' => array_sum($job_data)
- ];
- return view('statistics.app.demand.education_compare', $return_data);
- }
- //需求大于求职缺口最大的前十个职业(二级分类)
- public function jobGap(Request $request)
- {
- $subsite_id = session('caiqing_susbite_id');
- if ($subsite_id === null) {
- $subsite_id = -1;
- }
- //时间过滤
- $date_aprams = $this->getDateParams($request->all());
- $start_time = date('Y-m-d H:i:s', strtotime($date_aprams['start_year'].'-'.$date_aprams['start_month']));
- $EndDate = date('Y-m-d H:i:s', strtotime($date_aprams['end_year'].'-'.$date_aprams['end_month']));
- $end_time = date('Y-m-d H:i:s', strtotime("$EndDate +1 month")-1);
- //根据二级分类分组计算需求人数
- $job_where = [
- ['created_at', '<=', $end_time],
- ['created_at', '>=', $start_time],
- ['valid', '=', 1],
- ['display', '=', 1],
- ['category','<>',0]
- ];
- if (config('aix.companyset.comset.show_set.jobs_display') == 1) {
- $job_where[] = array('audit', '=', 1);
- } else {
- $job_where[] = array('audit', '<>', 3);
- }
- $company_where = [
- ['utype', '=', 1],
- ['user_status', '=', 1]
- ];
- if ($subsite_id != -1) {
- $company_where['subsite_id'] = $subsite_id;
- }
- $job_field = "IFNULL(sum(amount),0) as num,category,CONCAT_WS('.',topclass,category) as cate";
- $job_group = 'category';
- $job_rst = $this->jobsService->getJobNumsByCategory($job_where, $company_where, $job_field, $job_group);
- //获取求职人数(统计简历数量)
- $resume_where = [
- ['created_at', '<=', $end_time],
- ['created_at', '>=', $start_time],
- ];
- if (config('aix.personal_set.per_set.show_set.resume_display')=='1') {
- $resume_where[] = array('audit','=','2');
- } else {
- $resume_where[] = array('audit','<>','0');
- }
- $member_where = array(
- ['utype','=',2],
- ['status','=',1]
- );
- if ($subsite_id != -1) {
- //$resume_where[] = ['subsite_id','=',$subsite_id];
- $member_where[] = ['subsite_id','=',$subsite_id];
- }
- $resume_group = "job_cate";
- $resume_fields = "count(id) as num,SUBSTRING_INDEX(intention_jobs_id, '.', 2) as job_cate";
- $resume_order = '';
- $resume_rst = $this->resumeService->getResumeNumsGroup($resume_where, $member_where, $resume_fields, $resume_group, $resume_order);
- $resume_data = $resume_rst->pluck('num', 'job_cate')->toArray();
- //处理数据
- $table_data = [];
- if ($job_rst) {
- foreach ($job_rst as $k => $v) {
- $resume_num = 0;
- if (array_has($resume_data, $k)) {
- $resume_num = $resume_data[$k];
- }
- if ($v > $resume_num) {
- $rate = sprintf("%.2f", $resume_num>0?((int)$v/(int)$resume_num):'0');
- $table_data[$k] = ['cate'=>$k,'job_num'=>$v, 'resume_num'=>$resume_num, 'gap'=>$v-$resume_num, 'rate'=>$rate];
- }
- }
- }
- //根据缺口对排序二维数组进行排序
- usort($table_data, function ($a, $b) {
- if ($a['gap'] == $b['gap']) {
- return 0;
- }
- return ($a['gap'] > $b['gap']) ? -1 : 1;
- });
- $data = array_slice($table_data, 0, 10); //保留数组里前10条元素
- //处理职位分类名称
- $res_data = $this->resumeService->dealJobCategory($data);
- $return_data = [
- 'date_aprams' => $date_aprams,
- 'action_name' => app('request')->route()->getName(),
- 'res_data' => $res_data
- ];
- if ($request->input('isExcel')==1) {
- //导出文件
- if ($res_data) {
- $total_job = 0;
- $total_resume = 0;
- foreach ($res_data as $k => $v) {
- $total_job = (int)$total_job + (int)$v['job_num'];
- $total_resume = (int)$total_resume + (int)$v['resume_num'];
- }
- //合计
- $total_gap = $total_job - $total_resume;
- $total_rate = 0;
- if ($total_resume>0) {
- $total_rate = sprintf("%.2f", ((int)$total_job/(int)$total_resume));
- }
- $res_data[] = ['cate_name'=>'合计','job_num'=>$total_job, 'resume_num'=>$total_resume, 'gap'=>$total_gap, 'rate'=>$total_rate];
- }
- $export = new JobGapExport("总体分析 - ".$date_aprams['start_year']."年".$date_aprams['start_month']."月到".$date_aprams['end_year']."年".$date_aprams['end_month']."月求职缺口最大的前十个职业");
- $c = new Collection($res_data);
- $export->setCustomerData($c)->export();
- } else {
- return view('statistics.app.demand.job_gap', $return_data);
- }
- }
- //求职缺口 简历数量大于职位招聘数量(二级分类)
- public function resumeGap(Request $request)
- {
- $subsite_id = session('caiqing_susbite_id');
- if ($subsite_id === null) {
- $subsite_id = -1;
- }
- //时间过滤
- $date_aprams = $this->getDateParams($request->all());
- $start_time = date('Y-m-d H:i:s', strtotime($date_aprams['start_year'].'-'.$date_aprams['start_month']));
- $EndDate = date('Y-m-d H:i:s', strtotime($date_aprams['end_year'].'-'.$date_aprams['end_month']));
- $end_time = date('Y-m-d H:i:s', strtotime("$EndDate +1 month")-1);
- //获取求职人数(统计简历数量)
- $resume_where = [
- ['created_at', '<=', $end_time],
- ['created_at', '>=', $start_time],
- ];
- if (config('aix.personal_set.per_set.show_set.resume_display')=='1') {
- $resume_where[] = array('audit','=','2');
- } else {
- $resume_where[] = array('audit','<>','0');
- }
- $member_where = array(
- ['utype','=',2],
- ['status','=',1]
- );
- if ($subsite_id != -1) {
- $member_where[] = ['subsite_id','=',$subsite_id];
- }
- $resume_group = "job_cate";
- $resume_fields = "count(id) as num,SUBSTRING_INDEX(intention_jobs_id, '.', 2) as job_cate";
- $resume_order = '';
- $resume_rst = $this->resumeService->getResumeNumsGroup($resume_where, $member_where, $resume_fields, $resume_group, $resume_order);
- $resume_data = $resume_rst->pluck('num', 'job_cate')->toArray();
- $job_where = [
- ['created_at', '<=', $end_time],
- ['created_at', '>=', $start_time],
- ['valid', '=', 1],
- ['display', '=', 1],
- ['category','<>',0]
- ];
- if (config('aix.companyset.comset.show_set.jobs_display') == 1) {
- $job_where[] = array('audit', '=', 1);
- } else {
- $job_where[] = array('audit', '<>', 3);
- }
- $company_where = [
- ['utype', '=', 1],
- ['user_status', '=', 1]
- ];
- if ($subsite_id != -1) {
- $company_where['subsite_id'] = $subsite_id;
- }
- $job_field = "IFNULL(sum(amount),0) as num,CONCAT_WS('.',topclass,category) as cate";
- $job_group = 'category';
- $job_rst = $this->jobsService->getJobNumsByCategory($job_where, $company_where, $job_field, $job_group);
- //处理数据
- $data = [];
- if ($resume_data) {
- foreach ($resume_data as $k => $v) {
- $job_num = 0;
- if (array_has($job_rst, $k)) {
- $job_num = $job_rst[$k];
- }
- if ($v > $job_num) {
- $rate = sprintf("%.2f", $v>0?((int)$job_num/(int)$v):'0');
- $data[$k] = ['cate'=>$k,'job_num'=>$job_num, 'resume_num'=>$v, 'gap'=>$v-$job_num, 'rate'=>$rate];
- }
- }
- }
- //根据缺口对排序二维数组进行排序
- usort($data, function ($a, $b) {
- if ($a['gap'] == $b['gap']) {
- return 0;
- }
- return ($a['gap'] > $b['gap']) ? -1 : 1;
- });
- $table_data = array_slice($data, 0, 10); //保留数组里前10条元素
- //处理职位分类名称
- $res_data = $this->resumeService->dealJobCategory($table_data);
- $return_data = [
- 'date_aprams' => $date_aprams,
- 'action_name' => app('request')->route()->getName(),
- 'res_data' => $res_data
- ];
- if ($request->input('isExcel')==1) {
- if ($res_data) {
- $total_job = 0;
- $total_resume = 0;
- $total_gap = 0;
- foreach ($res_data as $k => $v) {
- $total_job = $total_job + (int)$v['job_num'];
- $total_resume = $total_resume + (int)$v['resume_num'];
- }
- $total_gap = $total_resume - $total_job;
- $total_rate = 0;
- if ($total_resume>0) {
- $total_rate = sprintf("%.2f", ((int)$total_job/(int)$total_resume));
- }
- $res_data[] = ['cate_name'=>'合计','job_num'=>$total_job, 'resume_num'=>$total_resume, 'gap'=>$total_gap, 'rate'=>$total_rate];
- }
- //导出文件
- $export = new ResumeGapExport("总体分析 - ".$date_aprams['start_year']."年".$date_aprams['start_month']."月到".$date_aprams['end_year']."年".$date_aprams['end_month']."月需求缺口最大的前十个职业");
- $c = new Collection($res_data);
- $export->setCustomerData($c)->export();
- } else {
- return view('statistics.app.demand.resume_gap', $return_data);
- }
- }
- public function dealResume(Request $request)
- {
- //过滤投递的企业所在分站
- $subsite_id = session('caiqing_susbite_id');
- if ($subsite_id === null) {
- $subsite_id = -1;
- }
- //时间过滤
- $date_aprams = $this->getDateParams($request->all());
- $date_aprams = $this->getDateDetail($request->all());
- $start_time = $date_aprams['start_date']?date('Y-m-d H:i:s', strtotime($date_aprams['start_date'])):$date_aprams['start_date'];
- $end_time = date('Y-m-d H:i:s', strtotime($date_aprams['end_date'].' +1 day')-1);
- $company_where = [['utype','=','1'],['audit','<>','3']/*['user_status','=','1']*/];
- if ($subsite_id != '-1') {
- $company_where[] = ['subsite_id','=',$subsite_id];
- }
- //获取简历投递数量
- $apply_where = [
- ['created_at', '<=', $end_time],
- ['created_at', '>=', $start_time]
- ];
- $apply_nums = $this->resumeService->getApplyNum($apply_where, $company_where);
- //获取已处理简历数
- $processed_where = [
- ['created_at', '<=', $end_time],
- ['created_at', '>=', $start_time],
- ['is_reply', '>', 0]
- ];
- $processed_nums = $this->resumeService->getApplyNum($processed_where, $company_where);
- //获取待处理简历数
- $unprocessed_where = [
- ['created_at', '<=', $end_time],
- ['created_at', '>=', $start_time],
- ['is_reply', '=', 0]
- ];
- $unprocessed_nums = $this->resumeService->getApplyNum($unprocessed_where, $company_where);
- //已处理简历分组情况
- $processed_rst = $this->resumeService->getApplyNumByGroup($processed_where, $company_where, 'count(id) as count, is_reply', ['is_reply'], 'is_reply asc');
- $processed_res = $processed_rst->pluck('count', 'is_reply')->toArray();
- $apply_state = $this->apply_state;
- $processed_arr = [];
- foreach ($apply_state as $k => $v) {
- $count = 0;
- if (array_has($processed_res, $k)) {
- $count = $processed_res[$k];
- }
- $processed_arr[$k] = ['name'=>$v.'简历数', 'count'=>$count];
- }
- //获取简历未处理数量前10的企业和简历数量
- $unprocessed_companys = $this->resumeService->getApplyNumByCompanyGroup($unprocessed_where, $company_where, 'count(id) as count, company_id', ['company_id'], 'count(id) desc', 10);
- //简历合适前20企业
- $apt_where = array(
- array('created_at', '<=', $end_time),
- array('created_at', '>=', $start_time),
- array('is_reply', '=', 1)
- );
- $apt_companys = $this->resumeService->getApplyNumByCompanyGroup($apt_where, $company_where, 'count(id) as count, company_id', ['company_id'], 'count(id) desc', 20);
- $return_data = [
- 'date_aprams' => $date_aprams,
- 'action_name' => app('request')->route()->getName(),
- 'apply_nums' => $apply_nums,
- 'processed_nums' => $processed_nums,
- 'unprocessed_nums' => $unprocessed_nums,
- 'processed_arr' => $processed_arr,
- 'unprocessed_companys' => $unprocessed_companys,
- 'apt_companys' => $apt_companys
- ];
- return view('statistics.app.demand.resume_deal', $return_data);
- }
- public function applyCompany(Request $request)
- {
- $subsite_id = session('caiqing_susbite_id');
- if ($subsite_id === null) {
- $subsite_id = -1;
- }
- //时间过滤
- $date_aprams = $this->getDateDetail($request->all());
- $start_time = $date_aprams['start_date']?date('Y-m-d H:i:s', strtotime($date_aprams['start_date'])):$date_aprams['start_date'];
- $end_time = date('Y-m-d H:i:s', strtotime($date_aprams['end_date'].' +1 day')-1);
- $company_where = [['utype','=','1'],['user_status','=','1']];
- if ($subsite_id != '-1') {
- $company_where[] = ['subsite_id','=',$subsite_id];
- }
- $apply_where = [
- ['created_at', '<=', $end_time],
- ['created_at', '>=', $start_time]
- ];
- //获取简历未处理数量前50的企业和简历数量
- $company_applys = $this->resumeService->getApplyNumByCompanyGroup($apply_where, $company_where, 'count(id) as count, company_id', ['company_id'], 'count(id) desc', 50);
- $return_data = [
- 'date_aprams' => $date_aprams,
- 'action_name' => app('request')->route()->getName(),
- 'company_applys' => $company_applys
- ];
- return view('statistics.app.demand.company_apply', $return_data);
- }
- //按产业分组
- public function industry(Request $request)
- {
- $subsite_id = session('caiqing_susbite_id');
- if ($subsite_id === null) {
- $subsite_id = -1;
- }
- //时间过滤
- $date_aprams = $this->getDateParams($request->all());
- $start_time = date('Y-m-d H:i:s', strtotime($date_aprams['start_year'].'-'.$date_aprams['start_month']));
- $EndDate = date('Y-m-d H:i:s', strtotime($date_aprams['end_year'].'-'.$date_aprams['end_month']));
- $end_time = date('Y-m-d H:i:s', strtotime("$EndDate +1 month")-1);
- //分别获取第一产业、第二产业和第三产业数据
- $job_where = [
- ['created_at', '<=', $end_time],
- ['created_at', '>=', $start_time],
- ['valid', '=', 1],
- ['display', '=', 1]
- ];
- if (config('aix.companyset.comset.show_set.jobs_display') == 1) {
- $job_where[] = array('audit', '=', 1);
- } else {
- $job_where[] = array('audit', '<>', 3);
- }
- $company_where = [
- ['utype', '=', 1],
- ['user_status', '=', 1]
- ];
- if ($subsite_id != '-1') {
- $company_where['subsite_id'] = $subsite_id;
- }
- $first_industry_num = $this->jobsService->getIndustryAmount($job_where, $company_where, [44]);
- $second_industry_num = $this->jobsService->getIndustryAmount($job_where, $company_where, [6,7,13,14,15,16,17,18,19,21,25,27,28,39,40,41]);
- $third_industry_num = $this->jobsService->getIndustryAmount($job_where, $company_where, [1,2,3,4,5,8,9,10,11,12,20,22,23,24,26,29,30,31,32,33,34,35,36,37,38,42,43,45]);
- $total_num = (int)$first_industry_num + (int)$second_industry_num + (int)$third_industry_num;
- $table_data = [
- ['name'=>'第一产业', 'value'=>$first_industry_num, 'rate'=> $total_num>0?sprintf("%.4f", (int)$first_industry_num/(int)$total_num)*100:0.00],
- ['name'=>'第二产业', 'value'=>$second_industry_num , 'rate'=> $total_num>0?sprintf("%.4f", (int)$second_industry_num/(int)$total_num)*100:0.00],
- ['name'=>'第三产业', 'value'=>$third_industry_num , 'rate'=> $total_num>0?sprintf("%.4f", (int)$third_industry_num/(int)$total_num)*100:0.00]
- ];
- $return_data = [
- 'date_aprams' => $date_aprams,
- 'action_name' => app('request')->route()->getName(),
- 'table_data' => $table_data,
- 'total_num' => $total_num
- ];
- if ($request->input('isExcel')==1) {
- if ($table_data) {
- $rate = 0;
- if ($total_num>0) {
- $rate = 100;
- }
- $table_data[] = ['name'=>'合计','value'=>$total_num, 'rate'=>$rate];
- }
- //导出文件
- $export = new IndustryExport("总体分析 - ".$date_aprams['start_year']."年".$date_aprams['start_month']."月到".$date_aprams['end_year']."年".$date_aprams['end_month']."月按产业分组的需求人数");
- $c = new Collection($table_data);
- $export->setCustomerData($c)->export();
- } else {
- return view('statistics.app.demand.industry', $return_data);
- }
- }
- //按行业分组
- public function tradeGroup(Request $request)
- {
- $subsite_id = session('caiqing_susbite_id');
- if ($subsite_id === null) {
- $subsite_id = -1;
- }
- //时间过滤
- $date_aprams = $this->getDateParams($request->all());
- $start_time = date('Y-m-d H:i:s', strtotime($date_aprams['start_year'].'-'.$date_aprams['start_month']));
- $EndDate = date('Y-m-d H:i:s', strtotime($date_aprams['end_year'].'-'.$date_aprams['end_month']));
- $end_time = date('Y-m-d H:i:s', strtotime("$EndDate +1 month")-1);
- $rst = $this->jobsService->getTradeAmount($start_time, $end_time, $subsite_id);
- $return_data = [
- 'date_aprams' => $date_aprams,
- 'action_name' => app('request')->route()->getName(),
- 'table_data' => $rst['data'],
- 'total_amount' => $rst['total']
- ];
- if ($request->input('isExcel')==1) {
- $export_data = $rst['data'];
- if ($export_data) {
- $export_total = $rst['total'];
- $export_rate = 0;
- if ($export_total>0) {
- $export_rate = 100;
- }
- $export_data[] = ['name'=>'合计','number'=>count($export_data)+1,'job_amount'=>$export_total,'rate'=>$export_rate];
- }
- //导出文件
- $export = new TradeExport("总体分析 - ".$date_aprams['start_year']."年".$date_aprams['start_month']."月到".$date_aprams['end_year']."年".$date_aprams['end_month']."月按行业分组的需求人数");
- $c = new Collection($export_data);
- $export->setCustomerData($c)->export();
- } else {
- return view('statistics.app.demand.trade', $return_data);
- }
- }
- //按用人单位性质、经济类型分组
- public function companyGroup(Request $request)
- {
- $subsite_id = session('caiqing_susbite_id');
- if ($subsite_id === null) {
- $subsite_id = -1;
- }
- //时间过滤
- $date_aprams = $this->getDateParams($request->all());
- $start_time = date('Y-m-d H:i:s', strtotime($date_aprams['start_year'].'-'.$date_aprams['start_month']));
- $EndDate = date('Y-m-d H:i:s', strtotime($date_aprams['end_year'].'-'.$date_aprams['end_month']));
- $end_time = date('Y-m-d H:i:s', strtotime("$EndDate +1 month")-1);
- $rst = $this->jobsService->getEconomicAmount($start_time, $end_time, $subsite_id);
- $return_data = [
- 'date_aprams' => $date_aprams,
- 'action_name' => app('request')->route()->getName(),
- 'chart_data' => $rst['chart_data'],
- 'table_data' => $rst['table_data'],
- 'nature_total' => $rst['nature_total'],
- 'domestic_data' => $rst['domestic_data'],
- ];
- if ($request->input('isExcel')==1) {
- //导出文件
- $export = new CompanyTypeExport("总体分析 - ".$date_aprams['start_year']."年".$date_aprams['start_month']."月到".$date_aprams['end_year']."年".$date_aprams['end_month']."月按经济类型分组的需求人数");
- $c = new Collection($rst['table_data']);
- $export->setCustomerData($c)->export();
- } else {
- return view('statistics.app.demand.economic', $return_data);
- }
- }
- //按职业分组
- public function jobTypeGroup(Request $request)
- {
- $subsite_id = session('caiqing_susbite_id');
- if ($subsite_id === null) {
- $subsite_id = -1;
- }
- //时间过滤
- $date_aprams = $this->getDateParams($request->all());
- $start_time = date('Y-m-d H:i:s', strtotime($date_aprams['start_year'].'-'.$date_aprams['start_month']));
- $EndDate = date('Y-m-d H:i:s', strtotime($date_aprams['end_year'].'-'.$date_aprams['end_month']));
- $end_time = date('Y-m-d H:i:s', strtotime("$EndDate +1 month")-1);
- $job_num1 = $this->jobsService->getJobTypeAmount($start_time, $end_time, [20], $subsite_id); //单位负责人
- $job_num2 = $this->jobsService->getJobTypeAmount($start_time, $end_time, [29,31,33,35,36,37,38,39,41,42,43,44,45,46,47,48,49], $subsite_id); //专业技术人员
- $job_num3 = $this->jobsService->getJobTypeAmount($start_time, $end_time, [18,23,25], $subsite_id); //办事人员和有关人员
- $job_num4 = $this->jobsService->getJobTypeAmount($start_time, $end_time, [11,12,13,14,15,16,17,21,22,24,26,27,28,32,40,50], $subsite_id); //商业和服务业人员
- $job_num5 = $this->jobsService->getJobTypeAmount($start_time, $end_time, [51], $subsite_id); //农林牧渔水利生产人员
- $job_num6 = $this->jobsService->getJobTypeAmount($start_time, $end_time, [19,30,34], $subsite_id); //生产运输设备操作工
- $job_num7 = $this->jobsService->getJobTypeAmount($start_time, $end_time, [0,52], $subsite_id); //其他
- $job_total = (int)$job_num1 + (int)$job_num2 + (int)$job_num3 + (int)$job_num4 + (int)$job_num5 + (int)$job_num6 + (int)$job_num7;
- $resume_num1 = $this->getResumeTypeAmount($start_time, $end_time, [20], $subsite_id); //单位负责人
- $resume_num2 = $this->getResumeTypeAmount($start_time, $end_time, [29,31,33,35,36,37,38,39,41,42,43,44,45,46,47,48,49], $subsite_id); //专业技术人员
- $resume_num3 = $this->getResumeTypeAmount($start_time, $end_time, [18,23,25], $subsite_id); //办事人员和有关人员
- $resume_num4 = $this->getResumeTypeAmount($start_time, $end_time, [11,12,13,14,15,16,17,21,22,24,26,27,28,32,40,50], $subsite_id); //商业和服务业人员
- $resume_num5 = $this->getResumeTypeAmount($start_time, $end_time, [51], $subsite_id); ///农林牧渔水利生产人员
- $resume_num6 = $this->getResumeTypeAmount($start_time, $end_time, [19,30,34], $subsite_id); //生产运输设备操作工
- $resume_num7 = $this->getResumeTypeAmount($start_time, $end_time, [0,52], $subsite_id); //其他
- $resume_total = (int)$resume_num1 + (int)$resume_num2 + (int)$resume_num3 + (int)$resume_num4 + (int)$resume_num5 + (int)$resume_num6 + (int)$resume_num7;
- //处理数据
- $data = [
- ['name'=>'单位负责人', 'job_amount'=>$job_num1, 'resume_num'=>$resume_num1, 'multiple'=>$resume_num1>0?sprintf("%.2f", (int)$job_num1/(int)$resume_num1):'0'],
- ['name'=>'专业技术人员', 'job_amount'=>$job_num2, 'resume_num'=>$resume_num2, 'multiple'=>$resume_num2>0?sprintf("%.2f", (int)$job_num2/(int)$resume_num2):'0'],
- ['name'=>'办事人员和有关人员', 'job_amount'=>$job_num3, 'resume_num'=>$resume_num3, 'multiple'=>$resume_num3>0?sprintf("%.2f", (int)$job_num3/(int)$resume_num3):'0'],
- ['name'=>'商业和服务业人员', 'job_amount'=>$job_num4, 'resume_num'=>$resume_num4, 'multiple'=>$resume_num4>0?sprintf("%.2f", (int)$job_num4/(int)$resume_num4):'0'],
- ['name'=>'农林牧渔水利生产人员','job_amount'=>$job_num5, 'resume_num'=>$resume_num5, 'multiple'=>$resume_num5>0?sprintf("%.2f", (int)$job_num5/(int)$resume_num5):'0'],
- ['name'=>'生产运输设备操作工', 'job_amount'=>$job_num6, 'resume_num'=>$resume_num6, 'multiple'=>$resume_num6>0?sprintf("%.2f", (int)$job_num6/(int)$resume_num6):'0'],
- ['name'=>'其他', 'job_amount'=>$job_num7, 'resume_num'=>$resume_num7, 'multiple'=>$resume_num7>0?sprintf("%.2f", (int)$job_num7/(int)$resume_num7):'0'],
- ];
- $return_data = [
- 'date_aprams' => $date_aprams,
- 'action_name' => app('request')->route()->getName(),
- 'job_amount' => $job_total,
- 'resume_total' => $resume_total,
- 'data' => $data
- ];
- if ($request->input('isExcel')==1) {
- if ($data) {
- foreach ($data as $k => $v) {
- $job_rate = '0';
- if ($job_total !=0) {
- $job_rate = sprintf("%.4f", $v['job_amount']>0?((int)$v['job_amount']/(int)$job_total):'0')*100;
- }
- $data[$k]['job_rate'] = $job_rate;
- $resume_rate = '0';
- if ($resume_total !=0) {
- $resume_rate = sprintf("%.4f", $v['resume_num']>0?((int)$v['resume_num']/(int)$resume_total):'0')*100;
- }
- $data[$k]['resume_rate'] = $resume_rate;
- }
- //添加合计信息
- $all_multiple = 0;
- if ($resume_total !=0) {
- $all_multiple = sprintf("%.2f", $resume_total>0?((int)$job_total/(int)$resume_total):'0');
- }
- $all_job_rate = '0';
- if ($job_total>0) {
- $all_job_rate = '100';
- }
- $all_resume_rate = '0';
- if ($resume_total>0) {
- $all_resume_rate = '100';
- }
- $data[] = [
- 'name' => '合计',
- 'job_amount' => $job_total,
- 'resume_num' => $resume_total,
- 'job_rate' => $all_job_rate,
- 'resume_rate'=> $all_resume_rate,
- 'multiple' => $all_multiple
- ];
- }
- //导出文件
- $export = new TypeExport("总体分析 - ".$date_aprams['start_year']."年".$date_aprams['start_month']."月到".$date_aprams['end_year']."年".$date_aprams['end_month']."月按职业分组的供求人数");
- $c = new Collection($data);
- $export->setCustomerData($c)->export();
- } else {
- return view('statistics.app.demand.job_type', $return_data);
- }
- }
- public function getResumeTypeAmount($start_time, $end_time, $types, $subsite_id)
- {
- $resume_where = [
- ['created_at', '<=', $end_time],
- ['created_at', '>=', $start_time],
- ];
- if (config('aix.personal_set.per_set.show_set.resume_display')=='1') {
- $resume_where[] = array('audit','=','2');
- } else {
- $resume_where[] = array('audit','<>','0');
- }
- $resume_where[] = ['intention_jobs_id','in',$types];
- if ($subsite_id != '-1') {
- $resume_where[] = array('subsite_id','=',$subsite_id);
- }
- $list = $this->searchService->search('Resume', $resume_where, ['id'=>'asc'], '');
- return $list->total();
- }
- public function getEducationJobNums($start_time, $end_time, $subsite_id)
- {
- $where = $this->getJobWhere($subsite_id, $start_time, $end_time);
- $job_where = $where['job_where'];
- $company_where = $where['company_where'];
- $edu_fields = 'sum(amount) 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);
- $job_data = [];
- if ($edu_rst) {
- foreach ($edu_rst as $k => $v) {
- $job_data[$v['education']] = $v['num'];
- }
- }
- return $job_data;
- }
- public function getEducationResumeNums($start_time, $end_time, $subsite_id)
- {
- $member_where = [
- ['m.utype','=',2],
- ['r.created_at','>=',$start_time],
- ['r.created_at','<=',$end_time]
- ];
- if ($subsite_id !='-1') {
- $member_where[] = ['m.subsite_id','=',$subsite_id];
- }
- if (config('aix.personal_set.per_set.show_set.resume_display')=='1') {
- $member_where[] = array('r.audit','=','2');
- } else {
- $member_where[] = array('r.audit','<>','0');
- }
- $edu_fields = 'count(r.id) as num, mi.education,mi.education_cn';
- $edu_group = 'mi.education';
- $where_str = 'm.deleted_at IS NULL AND mi.deleted_at IS NULL AND r.deleted_at IS NULL';
- $resume_rst = $this->memberService->getJobSeekersByGroup($member_where, $where_str, $edu_fields, $edu_group);
- $resume_data = $resume_rst->pluck('num', 'education')->toArray();
- return $resume_data;
- }
- //按文化程度分组的供求人数
- public function educationGroup(Request $request)
- {
- $subsite_id = session('caiqing_susbite_id');
- if ($subsite_id === null) {
- $subsite_id = -1;
- }
- //时间过滤
- $date_aprams = $this->getDateParams($request->all());
- $start_time = date('Y-m-d H:i:s', strtotime($date_aprams['start_year'].'-'.$date_aprams['start_month']));
- $EndDate = date('Y-m-d H:i:s', strtotime($date_aprams['end_year'].'-'.$date_aprams['end_month']));
- $end_time = date('Y-m-d H:i:s', strtotime("$EndDate +1 month")-1);
- $date_params = $this->getCompareDate($request->all());
- $compare_start_date = $date_params['start_date_arr']?implode(' - ', $date_params['start_date_arr']):'';
- $compare_end_date = $date_params['end_date_arr']?implode(' - ', $date_params['end_date_arr']):'';
- if ($date_params['end_date_arr']) {
- $start_time = date('Y-m-d H:i:s', strtotime($date_params['end_date_arr'][0]));
- $end_time = date('Y-m-d H:i:s', strtotime($date_params['end_date_arr'][1]." +1 day")-1);
- } else {
- $start_time = date('Y-m-d H:i:s', strtotime($date_params['start_date_arr'][0]));
- $end_time = date('Y-m-d H:i:s', strtotime($date_params['start_date_arr'][1]." +1 day")-1);
- }
- //过滤时间不等,需要显示对比数据
- $compare_flag = false;
- if (($date_params['end_date_arr'] != $date_params['start_date_arr']) && $date_params['end_date_arr'] && $date_params['start_date_arr']) {
- $compare_flag = true;
- }
- //获取文化程度数据 + 无要求
- $cates = $this->companyService->getCategories(['AIX_education'=>100]);
- $edu_cates = [];
- if (array_has($cates, 'AIX_education')) {
- $edu_cates = $cates['AIX_education'];
- $edu_cates['0'] = ['id'=>0, 'demand'=>'无要求'];
- }
- //获取需求信息
- $job_data = $this->getEducationJobNums($start_time, $end_time, $subsite_id);
- //获取求职人数
- $resume_data = $this->getEducationResumeNums($start_time, $end_time, $subsite_id);
- $compare_job_data = array();
- $compare_resume_data = array();
- if ($compare_flag) {
- $c_stime = date('Y-m-d H:i:s', strtotime($date_params['start_date_arr'][0]));
- $c_etime = date('Y-m-d H:i:s', strtotime($date_params['start_date_arr'][1]." +1 day")-1);
- $compare_job_data = $this->getEducationJobNums($c_stime, $c_etime, $subsite_id);
- $compare_resume_data = $this->getEducationResumeNums($c_stime, $c_etime, $subsite_id);
- }
- $resume_total = array_sum($resume_data);
- $job_total = array_sum($job_data);
- $c_job_total = array_sum($compare_job_data);
- $c_resume_total = array_sum($compare_resume_data);
- $c_table_data = [];
- $table_data = [];
- if ($edu_cates) {
- foreach ($edu_cates as $k => $v) {
- $job_num = array_has($job_data, $k)?$job_data[$k]:0;
- $resume_num = array_has($resume_data, $k)?$resume_data[$k]:0;
- if ($resume_num==0 || $job_num==0) {
- $rate = 0;
- } else {
- $rate = $resume_num>0?sprintf("%.2f", (int)$job_num/(int)$resume_num):'0';
- }
- $job_rate = 0;
- if ($job_total) {
- $job_rate = sprintf("%.4f", (int)$job_num/(int)$job_total)*100;
- }
- $resume_rate = 0;
- if ($resume_total) {
- $resume_rate = sprintf("%.4f", (int)$resume_num/(int)$resume_total)*100;
- }
- $table_data[] = ['name'=>$v['demand'], 'job_amount'=>$job_num?$job_num:0,'job_rate'=>$job_rate, 'resume_num'=>$resume_num?$resume_num:0, 'resume_rate'=>$resume_rate,'multiple'=>$rate];
- //对比数据
- $c_job_num = array_has($compare_job_data, $k)?$compare_job_data[$k]:0;
- $c_resume_num = array_has($compare_resume_data, $k)?$compare_resume_data[$k]:0;
- if ($c_job_num==0 || $c_resume_num==0) {
- $c_rate = 0;
- } else {
- $c_rate = $c_resume_num>0?sprintf("%.2f", (int)$c_job_num/(int)$c_resume_num):'0';
- }
- $c_job_rate = 0;
- if ($c_job_total) {
- $c_job_rate = sprintf("%.4f", (int)$c_job_num/(int)$c_job_total)*100;
- }
- $c_resume_rate = 0;
- if ($c_resume_total) {
- $c_resume_rate = sprintf("%.4f", (int)$c_resume_num/(int)$c_resume_total)*100;
- }
- $c_table_data[] = ['name'=>$v['demand'], 'job_amount'=>$c_job_num?$c_job_num:0, 'job_rate'=>$c_job_rate,'resume_num'=>$c_resume_num?$c_resume_num:0, 'resume_rate'=>$c_resume_rate,'multiple'=>$c_rate];
- }
- }
- $return_data = [
- 'date_aprams' => $date_aprams,
- 'date_params' => $date_params,
- 'compare_flag' => $compare_flag,
- 'compare_start_date' => $compare_start_date,
- 'compare_end_date' => $compare_end_date,
- 'compare_table_data' => $c_table_data,
- 'compare_job_total' => $c_job_total,
- 'compare_resume_total' => $c_resume_total,
- 'compare_flag' => $compare_flag,
- 'action_name' => app('request')->route()->getName(),
- 'table_data' => $table_data,
- 'resume_total' => $resume_total,
- 'job_total' => $job_total
- ];
- if ($request->input('isExcel')==1) {
- if ($table_data) {
- foreach ($table_data as $k => $v) {
- $job_rate = '0';
- if ($job_total !=0) {
- $job_rate = sprintf("%.4f", $v['job_amount']>0?((int)$v['job_amount']/(int)$job_total):'0')*100;
- }
- $table_data[$k]['job_rate'] = $job_rate;
- $resume_rate = '0';
- if ($resume_total !=0) {
- $resume_rate = sprintf("%.4f", $v['resume_num']>0?((int)$v['resume_num']/(int)$resume_total):'0')*100;
- }
- $table_data[$k]['resume_rate'] = $resume_rate;
- }
- //添加合计信息
- $all_multiple = 0;
- if ($resume_total !=0) {
- $all_multiple = sprintf("%.2f", $resume_total>0?((int)$job_total/(int)$resume_total):'0');
- }
- $all_job_rate = '0';
- if ($job_total>0) {
- $all_job_rate = '100';
- }
- $all_resume_rate = '0';
- if ($resume_total>0) {
- $all_resume_rate = '100';
- }
- $table_data[] = [
- 'name' => '合计',
- 'job_amount' => $job_total,
- 'resume_num' => $resume_total,
- 'job_rate' => $all_job_rate,
- 'resume_rate'=> $all_resume_rate,
- 'multiple' => $all_multiple
- ];
- }
- //导出文件
- $export = new EducationExport("总体分析 - ".$date_aprams['start_year']."年".$date_aprams['start_month']."月到".$date_aprams['end_year']."年".$date_aprams['end_month']."月按文化程度分组的需求人数");
- $c = new Collection($table_data);
- $export->setCustomerData($c)->export();
- } else {
- return view('statistics.app.demand.education', $return_data);
- }
- }
- //按人员类别分组
- public function personTypeGroup(Request $request)
- {
- $subsite_id = session('caiqing_susbite_id');
- if ($subsite_id === null) {
- $subsite_id = -1;
- }
- //时间过滤
- $date_aprams = $this->getDateParams($request->all());
- $start_time = date('Y-m-d H:i:s', strtotime($date_aprams['start_year'].'-'.$date_aprams['start_month']));
- $endDate = date('Y-m-d H:i:s', strtotime($date_aprams['end_year'].'-'.$date_aprams['end_month']));
- $end_time = date('Y-m-d H:i:s', strtotime("$endDate +1 month")-1);
- //按就业状态分组获取所有求职信息 AIX_current
- $resume_where = [
- ['created_at', '<=', $end_time],
- ['created_at', '>=', $start_time],
- ];
- if (config('aix.personal_set.per_set.show_set.resume_display')=='1') {
- $resume_where[] = array('audit','=','2');
- } else {
- $resume_where[] = array('audit','<>','0');
- }
- $member_where = array(
- ['utype','=',2],
- ['status','=',1]
- );
- if ($subsite_id != -1) {
- $member_where[] = ['subsite_id','=',$subsite_id];
- }
- $resume_group = "current";
- $resume_fields = "count(id) as num,current,current_cn";
- $resume_order = 'current desc';
- $resume_rst = $this->resumeService->getResumeNumsGroup($resume_where, $member_where, $resume_fields, $resume_group, $resume_order);
- $chart_data = [
- ['name'=>'新成长失业青年','value'=>0],
- ['name'=>'就业专业人员','value'=>0],
- ['name'=>'在业人员','value'=>0],
- ];
- $resume_num1 = 0;
- $resume_num2 = 0;
- $resume_num3 = 0;
- $resume_total = 0;
- if ($resume_rst->isNotEmpty()) {
- foreach ($resume_rst->toArray() as $k => $v) {
- if ($v['current_cn'] == '应届毕业生') { //获取新成长失业青年求职数量(应届毕业生 245)
- $resume_num1 = (int)$resume_num1 + (int)$v['num'];
- } elseif ($v['current_cn'] == '我目前已离职,可快速到岗') { //获取就业专业人员求职数量(已离职可快速到岗 241)
- $resume_num2 = (int)$resume_num2 + (int)$v['num'];
- } else { //获取在业人员求职数量 (在职、考虑、无跳槽 242,243,244)
- $resume_num3 = (int)$resume_num3 + (int)$v['num'];
- }
- $resume_total = (int)$resume_total + (int)$v['num'];
- }
- $chart_data = [
- ['name'=>'新成长失业青年','value'=>$resume_num1],
- ['name'=>'就业专业人员','value'=>$resume_num2],
- ['name'=>'在业人员','value'=>$resume_num3],
- ];
- }
- $return_data = [
- 'date_aprams' => $date_aprams,
- 'action_name' => app('request')->route()->getName(),
- 'chart_data' => $chart_data,
- 'resume_total' => $resume_total
- ];
- if ($request->input('isExcel')==1) {
- if ($chart_data) {
- foreach ($chart_data as $k => $v) {
- $rate = 0;
- if ($resume_total>0) {
- $rate = sprintf("%.4f", $v['value']>0?((int)$v['value']/(int)$resume_total):'0')*100;
- }
- $chart_data[$k]['rate'] = $rate;
- }
- $all_rate = 0;
- if ($resume_total>0) {
- $all_rate = 100;
- }
- $chart_data[] = array('name'=>'合计','value'=>$resume_total,'rate'=>$all_rate);
- }
- $export = new PersonTypeExport("总体分析 - ".$date_aprams['start_year']."年".$date_aprams['start_month']."月到".$date_aprams['end_year']."年".$date_aprams['end_month']."月按人员类别分组的供求人数");
- $c = new Collection($chart_data);
- $export->setCustomerData($c)->export();
- } else {
- return view('statistics.app.demand.person_type', $return_data);
- }
- }
- //按年龄分组
- /**
- * 年龄分组的统计口径为:
- * 在后台自动获取年龄段,每个年龄段招聘人数的计算方式为:取职位中填写的年龄段和后台年龄段对比,查看跨越几个年龄段,平均分到各个年龄段,如果有余数加到最小的年龄段内。
- * */
- public function ageGroup(Request $request)
- {
- $subsite_id = session('caiqing_susbite_id');
- if ($subsite_id === null) {
- $subsite_id = -1;
- }
- //时间过滤
- $date_aprams = $this->getDateParams($request->all());
- $start_time = date('Y-m-d H:i:s', strtotime($date_aprams['start_year'].'-'.$date_aprams['start_month']));
- $endDate = date('Y-m-d H:i:s', strtotime($date_aprams['end_year'].'-'.$date_aprams['end_month']));
- $end_time = date('Y-m-d H:i:s', strtotime("$endDate +1 month")-1);
- //获取后台年龄分类信息 categories AIX_age
- $cates = $this->categoryService->getCategories(['AIX_age'=>100]);
- if (array_has($cates, 'AIX_age')) {
- $age_cates = $cates['AIX_age'];
- } else {
- $age_cates = [];
- }
- $age_arr = [];
- $age_val_arr = [];
- if ($age_cates) {
- foreach ($age_cates as $k => $v) {
- $age_arr[] = $v['demand'];
- if (preg_match_all('(\d+)', $v['demand'], $reg)) {
- $reg = $reg[0];
- if (count($reg)>1) {
- $min_age = $reg[0];
- $max_age = $reg[1];
- } else {
- $min_age = $reg[0];
- $max_age = '';
- }
- $age_val_arr[] = array('min_age'=>$min_age, 'max_age'=>$max_age);
- }
- }
- }
- //获取职位查询条件
- $where_arr = $this->getJobWhere($subsite_id, $start_time, $end_time);
- //获取不同年龄段的招聘人数
- $job_amounts = $this->jobsService->getJobAmountByAge($where_arr, $age_val_arr, $age_arr);
- //获取求职人数(计算简历数量)
- $resume_nums = $this->resumeService->getResumeNumsByAgeGroup($subsite_id, $start_time, $end_time, $age_val_arr, $age_arr);
- $job_total = array_sum($job_amounts);
- $resume_total = array_sum($resume_nums);
- $table_data = [];
- foreach ($age_arr as $k => $v) {
- $job_num = array_has($job_amounts, $v)?$job_amounts[$v]:0;
- $resume_num = array_has($resume_nums, $v)?$resume_nums[$v]:0;
- $job_rate = 0;
- if ($job_total) {
- $job_rate = sprintf("%.4f", (int)$job_num/(int)$job_total)*100;
- }
- $resume_rate = 0;
- if ($resume_total) {
- $resume_rate = sprintf("%.4f", (int)$resume_num/(int)$resume_total)*100;
- }
- $multiple = 0;
- if ($resume_num) {
- $multiple = sprintf("%.2f", (int)$job_num/(int)$resume_num);
- }
- $table_data[] = ['name'=>$v, 'job_amount'=>$job_num,'job_rate'=>$job_rate, 'resume_num'=>$resume_num,'resume_rate'=>$resume_rate, 'multiple'=>$multiple];
- }
- $chart_data = $table_data;
- //添加合计信息
- $total_job_rate = 0;
- if ($job_total) {
- $total_job_rate = 100;
- }
- $total_resume_rate = 0;
- $total_multiple = 0;
- if ($resume_total) {
- $total_resume_rate = 100;
- $total_multiple = sprintf("%.2f", (int)$job_total/(int)$resume_total);
- }
- $table_data[] = ['name'=>'合计', 'job_amount'=>$job_total, 'job_rate'=>$total_job_rate, 'resume_num'=>$resume_total, 'resume_rate'=>$total_resume_rate, 'multiple'=>$total_multiple];
- $return_data = [
- 'date_aprams' => $date_aprams,
- 'action_name' => app('request')->route()->getName(),
- 'table_data' => $table_data,
- 'chart_data' => $chart_data
- ];
- if ($request->input('isExcel')==1) {
- $export = new AgeExport("总体分析 - ".$date_aprams['start_year']."年".$date_aprams['start_month']."月到".$date_aprams['end_year']."年".$date_aprams['end_month']."月按年龄分组的供求人数");
- $c = new Collection($table_data);
- $export->setCustomerData($c)->export();
- } else {
- return view('statistics.app.demand.age', $return_data);
- }
- }
- //按性别分组
- public function sexGroup(Request $request)
- {
- $subsite_id = session('caiqing_susbite_id');
- if ($subsite_id === null) {
- $subsite_id = -1;
- }
- //时间过滤
- $date_params = $this->getCompareDate($request->all());
- $compare_start_date = $date_params['start_date_arr']?implode(' - ', $date_params['start_date_arr']):'';
- $compare_end_date = $date_params['end_date_arr']?implode(' - ', $date_params['end_date_arr']):'';
- if ($date_params['end_date_arr']) {
- $start_time = date('Y-m-d H:i:s', strtotime($date_params['end_date_arr'][0]));
- $end_time = date('Y-m-d H:i:s', strtotime($date_params['end_date_arr'][1]." +1 day")-1);
- } else {
- $start_time = date('Y-m-d H:i:s', strtotime($date_params['start_date_arr'][0]));
- $end_time = date('Y-m-d H:i:s', strtotime($date_params['start_date_arr'][1]." +1 day")-1);
- }
- //过滤时间不等,需要显示对比数据
- $compare_flag = false;
- if (($date_params['end_date_arr'] != $date_params['start_date_arr']) && $date_params['end_date_arr'] && $date_params['start_date_arr']) {
- $compare_flag = true;
- }
- //获取简历数据 - 求职信息
- $resume_rst = $this->resumeService->getResumeBySexGroup($subsite_id, $start_time, $end_time);
- $resume_data = $this->dealSexData($resume_rst, 1);
- $resume_total = array_sum($resume_data);
- $c_resume_data = [];
- $c_resume_total = 0;
- $c_job_data = [];
- $c_job_total = 0;
- //职位数量分组
- $job_rst = $this->getJobNumsBySexGroup($subsite_id, $start_time, $end_time);
- $job_data = $this->dealSexData($job_rst, 2);
- $job_total = array_sum($job_data);
- if ($compare_flag) {
- $c_stime = date('Y-m-d H:i:s', strtotime($date_params['start_date_arr'][0]));
- $c_etime = date('Y-m-d H:i:s', strtotime($date_params['start_date_arr'][1]." +1 day")-1);
- $c_resume_rst = $this->resumeService->getResumeBySexGroup($subsite_id, $c_stime, $c_etime);
- $c_resume_data = $this->dealSexData($c_resume_rst);
- $c_resume_total = array_sum($c_resume_data);
- $c_job_rst = $this->getJobNumsBySexGroup($subsite_id, $c_stime, $c_etime);
- $c_job_data = $this->dealSexData($c_job_rst, 2);
- $c_job_total = array_sum($c_job_data);
- }
- //处理数据
- $sex_cates = array('0'=>'不限','1'=>'男','2'=>'女');
- $table_data = array();
- $c_table_data = array();
- foreach ($sex_cates as $k => $v) {
- $job_amount = array_has($job_data, $k)?$job_data[$k]:0;
- $resume_num = array_has($resume_data, $k)?$resume_data[$k]:0;
- $job_rate = 0;
- if ($job_total>0) {
- $job_rate = sprintf("%.4f", (int)$job_amount/(int)$job_total)*100;
- }
- $resume_rate = 0;
- if ($resume_total>0) {
- $resume_rate = sprintf("%.4f", (int)$resume_num/(int)$resume_total)*100;
- }
- if ($resume_num==0 || $job_amount==0) {
- $multiple = 0;
- } else {
- $multiple = $resume_num>0?sprintf("%.2f", (int)$job_amount/(int)$resume_num):'0';
- }
- $table_data[] = array(
- 'name'=>$v,
- 'job_amount'=>$job_amount,
- 'job_rate'=>$job_rate,
- 'resume_num'=>$resume_num,
- 'resume_rate'=>$resume_rate,
- 'multiple'=>$multiple
- );
- //对比数据
- $c_job_amount = array_has($c_job_data, $k)?$c_job_data[$k]:0;
- $c_resume_num = array_has($c_resume_data, $k)?$c_resume_data[$k]:0;
- $c_job_rate = 0;
- if ($c_job_total>0) {
- $c_job_rate = sprintf("%.4f", (int)$c_job_amount/(int)$c_job_total)*100;
- }
- $c_resume_rate = 0;
- if ($c_resume_total>0) {
- $c_resume_rate = sprintf("%.4f", (int)$c_resume_num/(int)$c_resume_total)*100;
- }
- if ($c_resume_num==0 || $c_job_amount==0) {
- $c_multiple = 0;
- } else {
- $c_multiple = $c_resume_num>0?sprintf("%.2f", (int)$c_job_amount/(int)$c_resume_num):'0';
- }
- $c_table_data[] = array(
- 'name'=>$v,
- 'job_amount'=>$c_job_amount,
- 'job_rate'=>$c_job_rate,
- 'resume_num'=>$c_resume_num,
- 'resume_rate'=>$c_resume_rate,
- 'multiple'=>$c_multiple
- );
- }
- //合计信息
- $all_job_rate = 0;
- if ($job_total>0) {
- $all_job_rate = sprintf("%.4f", (int)$job_total/(int)$job_total)*100;
- }
- $all_resume_rate = 0;
- if ($resume_total>0) {
- $all_resume_rate = sprintf("%.4f", (int)$resume_total/(int)$resume_total)*100;
- }
- $all_multiple = 0;
- if ($resume_total>0) {
- $all_multiple = sprintf("%.2f", (int)$job_total/(int)$resume_total);
- }
- $table_data[] = array(
- 'name'=>'合计',
- 'job_amount'=>$job_total,
- 'job_rate'=>$all_job_rate,
- 'resume_num'=>$resume_total,
- 'resume_rate'=>$all_resume_rate,
- 'multiple'=>$all_multiple
- );
- $call_job_rate = 0;
- if ($c_job_total>0) {
- $call_job_rate = sprintf("%.4f", (int)$c_job_total/(int)$c_job_total)*100;
- }
- $call_resume_rate = 0;
- if ($c_resume_total>0) {
- $call_resume_rate = sprintf("%.4f", (int)$c_resume_total/(int)$c_resume_total)*100;
- }
- $call_multiple = 0;
- if ($c_resume_total>0) {
- $call_multiple = sprintf("%.2f", (int)$c_job_total/(int)$c_resume_total);
- }
- $c_table_data[] = array(
- 'name'=>'合计',
- 'job_amount'=>$c_job_total,
- 'job_rate'=>$call_job_rate,
- 'resume_num'=>$c_resume_total,
- 'resume_rate'=>$call_resume_rate,
- 'multiple'=>$call_multiple
- );
- $return_data = [
- 'date_params' => $date_params,
- 'compare_start_date' => $compare_start_date,
- 'compare_end_date' => $compare_end_date,
- 'action_name' => app('request')->route()->getName(),
- 'compare_flag' => $compare_flag,
- 'table_data' => $table_data,
- 'compare_table_data' => $c_table_data,
- 'job_total' => $job_total,
- 'compare_job_total' => $c_job_total,
- 'resume_total' => $resume_total,
- 'compare_resume_total' => $c_resume_total
- ];
- return view('statistics.app.demand.sex', $return_data);
- }
- public function getJobNumsBySexGroup($subsite_id, $start_time, $end_time)
- {
- $job_where = [
- ['created_at','<=',$end_time],
- ['created_at','>=',$start_time],
- ['valid','=',1]
- ];
- if (config('aix.companyset.comset.show_set.jobs_display')==1) {
- $job_where[] = array('audit','=',1);
- } else {
- $job_where[] = array('audit','<>',3);
- }
- $company_where = array(array('utype','=',1),array('audit','<>',3));
- if ($subsite_id != -1) {
- $company_where[] = ['subsite_id','=',$subsite_id];
- }
- $fields = 'sum(amount) as num,sex';
- $group_by = 'sex';
- return $this->jobsService->getJobNumsByGroup($job_where, $company_where, $fields, $group_by);
- }
- public function dealSexData($data, $type = 1)
- {
- $rst = array();
- if ($type == 1) {
- if (count($data)) {
- foreach ($data as $k => $v) {
- $rst[$v->sex] = $v->num;
- }
- }
- } else {
- if (count($data)) {
- foreach ($data as $k => $v) {
- $rst[$v['sex']] = $v['num'];
- }
- }
- }
- return $rst;
- }
- public function getJobWhere($subsite_id, $start_time, $end_time)
- {
- $job_where = [
- ['created_at','<=',$end_time],
- ['created_at','>=',$start_time],
- ['valid','=',1],
- //['display','=',1]
- ];
- if (config('aix.companyset.comset.show_set.jobs_display')==1) {
- $job_where[] = array('audit','=',1);
- } else {
- $job_where[] = array('audit','<>',3);
- }
- //$company_where = ['utype'=>1,'user_status'=>1];
- $company_where = [['utype','=',1],['audit','<>',3]];
- if ($subsite_id != -1) {
- $company_where[] = ['subsite_id','=',$subsite_id];
- }
- return ['job_where'=>$job_where, 'company_where'=>$company_where];
- }
- public function getJobfairs($subsite_id)
- {
- $j_where = array();
- if ($subsite_id != -1) {
- $j_where[] = ['subsite_id','=',$subsite_id];
- }
- $j_where[] = ['holddate_end','<=',time()];
- $j_order = 'id desc';
- $jobfair_rst = $this->jobfairService->getJobfairs($j_where, $j_order);
- $jobfairs = array();
- if ($jobfair_rst->isNotEmpty()) {
- foreach ($jobfair_rst as $k => $v) {
- $jobfairs[$v->id] = array('title'=>$v->title,'holddate_end'=>$v->holddate_end);
- }
- }
- return $jobfairs;
- }
- }
|