jobsRepository = $jobsRepository; $this->categoryJobsRepository = $categoryJobsRepository; $this->jobfairPutJobRepository = $jobfairPutJobRepository; } //获取职位分类信息 public function getJobsCategoryInfo() { $result = Cache::get('jobs_cate_list'); if (null === $result) { $result = $this->categoryJobsRepository->jobsCateInfoCache(); Cache::put('jobs_cate_list', $result, '86400'); } return $result; } public function getValidJobNum($where) { return $this->jobsRepository->getJobCount($where); } public function getJobNumGroup($where, $company_where, $group_by) { $rst = $this->jobsRepository->getJobNumGroup($where, $company_where, $group_by); return $rst->pluck('count(id)', 'DATE(created_at)')->toArray(); } public function getJobNumsByGroup($where, $company_where, $fields, $group_by, $order_by = '') { $rst = $this->jobsRepository->getNumsByGroup($where, $company_where, $fields, $group_by, $order_by); return $rst->toArray(); } public function getJobNumsByCategory($where, $company_where, $fields, $group_by, $order_by = '') { $rst = $this->jobsRepository->getNumsByGroup($where, $company_where, $fields, $group_by, $order_by); return $rst->pluck('num', 'cate')->toArray(); } public function getJobNumByTradeGroup($where, $fields, $group_by, $order_by = '', $limit = '') { $rst = $this->jobsRepository->getJobNumByTradeGroup($where, $fields, $group_by, $order_by, $limit); return $rst->toArray(); } public function getAvgWageByGroup($where, $company_where, $fields, $group_by, $order_by = '', $limit = '') { $rst = $this->jobsRepository->getAvgWageByGroup($where, $company_where, $fields, $group_by, $order_by, $limit); $list = $rst->toArray(); $cates = $this->getJobsCategoryInfo(); $cates = $cates['id']; if ($list) { foreach ($list as $k => $v) { if ($cates && array_has($cates, $v[$group_by])) { $list[$k]['name'] = $cates[$v[$group_by]]['name']; } else { $list[$k]['name'] = ''; } } } return $list; } public function getJobsTopclass($job_where, $whereIn, $fields, $group_by, $order_by, $limit = '') { $rst = $this->jobfairPutJobRepository->getTopClassRand($job_where, $whereIn, $fields, $group_by, $order_by, $limit); $list = $rst->pluck('num', 'topclass')->toArray(); $cates = $this->getJobsCategoryInfo(); $cates = $cates['id']; $data = []; if ($list) { foreach ($list as $k => $v) { $data[$k]['value'] = $v; if ($cates && array_has($cates, $k)) { $data[$k]['name'] = $cates[$k]['name']; } else { $data[$k]['name'] = ''; } } } return $data; } public function getIndustryAmount($job_where, $company_where, $trades) { $rst = $this->jobsRepository->getIndustryAmount($job_where, $company_where, $trades); return $rst; } public function getTradeAmount($start_time, $end_time, $subsite_id) { $trade_num1 = $this->getTradeAmountByGruop($start_time, $end_time, [44], $subsite_id); $trade_num2 = $this->getTradeAmountByGruop($start_time, $end_time, [39,40], $subsite_id); $trade_num3 = $this->getTradeAmountByGruop($start_time, $end_time, [6,7,13,14,15,16,17,18,19,21,25], $subsite_id); $trade_num4 = $this->getTradeAmountByGruop($start_time, $end_time, [41], $subsite_id); $trade_num5 = $this->getTradeAmountByGruop($start_time, $end_time, [27,28], $subsite_id); $trade_num6 = $this->getTradeAmountByGruop($start_time, $end_time, [37,38], $subsite_id); $trade_num7 = $this->getTradeAmountByGruop($start_time, $end_time, [1,2,3,4], $subsite_id); $trade_num8 = $this->getTradeAmountByGruop($start_time, $end_time, [12], $subsite_id); $trade_num9 = $this->getTradeAmountByGruop($start_time, $end_time, [35,36], $subsite_id); $trade_num10 = $this->getTradeAmountByGruop($start_time, $end_time, [9,10], $subsite_id); $trade_num11 = $this->getTradeAmountByGruop($start_time, $end_time, [26], $subsite_id); $trade_num12 = $this->getTradeAmountByGruop($start_time, $end_time, [8,11,22,23,29,31,32], $subsite_id); $trade_num13 = $this->getTradeAmountByGruop($start_time, $end_time, [34], $subsite_id); $trade_num14 = $this->getTradeAmountByGruop($start_time, $end_time, [45], $subsite_id); $trade_num15 = $this->getTradeAmountByGruop($start_time, $end_time, [30], $subsite_id); $trade_num16 = $this->getTradeAmountByGruop($start_time, $end_time, [33], $subsite_id); $trade_num17 = $this->getTradeAmountByGruop($start_time, $end_time, [20], $subsite_id); $trade_num18 = $this->getTradeAmountByGruop($start_time, $end_time, [5,24], $subsite_id); $trade_num19 = $this->getTradeAmountByGruop($start_time, $end_time, [42,43], $subsite_id); $total = (int)$trade_num1 + (int)$trade_num2+ (int)$trade_num3+ (int)$trade_num4+ (int)$trade_num5+ (int)$trade_num6+ (int)$trade_num7+ (int)$trade_num8+ (int)$trade_num9+ (int)$trade_num10+ (int)$trade_num11+ (int)$trade_num12+ (int)$trade_num13+ (int)$trade_num14+ (int)$trade_num15+ (int)$trade_num16+ (int)$trade_num17+ (int)$trade_num18+ (int)$trade_num19; $data = [ ['name'=>'农、林、牧、渔业','number'=>1,'job_amount'=>$trade_num1,'rate'=>$total>0?round($trade_num1/$total, 4)*100:'0'], ['name'=>'采矿业','number'=>2,'job_amount'=>$trade_num2,'rate'=>$total>0?round($trade_num2/$total, 4)*100:'0'], ['name'=>'制造业','number'=>3,'job_amount'=>$trade_num3,'rate'=>$total>0?round($trade_num3/$total, 4)*100:'0'], ['name'=>'电力、煤气及水的生产和供应业','number'=>4,'job_amount'=>$trade_num4,'rate'=>$total>0?round($trade_num4/$total, 4)*100:'0'], ['name'=>'建筑业','number'=>5,'job_amount'=>$trade_num5,'rate'=>$total>0?round($trade_num5/$total, 4)*100:'0'], ['name'=>'交通运输、仓储及邮电通信业','number'=>6,'job_amount'=>$trade_num6,'rate'=>$total>0?round($trade_num6/$total, 4)*100:'0'], ['name'=>'信息传输、计算机服务和软件业','number'=>7,'job_amount'=>$trade_num7,'rate'=>$total>0?round($trade_num7/$total, 4)*100:'0'], ['name'=>'批发和零售业','number'=>8,'job_amount'=>$trade_num8,'rate'=>$total>0?round($trade_num8/$total, 4)*100:'0'], ['name'=>'住宿和餐饮业','number'=>9,'job_amount'=>$trade_num9,'rate'=>$total>0?round($trade_num9/$total, 4)*100:'0'], ['name'=>'金融业','number'=>10,'job_amount'=>$trade_num10,'rate'=>$total>0?round($trade_num10/$total, 4)*100:'0'], ['name'=>'房地产业','number'=>11,'job_amount'=>$trade_num11,'rate'=>$total>0?round($trade_num11/$total, 4)*100:'0'], ['name'=>'租赁和商业服务业','number'=>12,'job_amount'=>$trade_num12,'rate'=>$total>0?round($trade_num12/$total, 4)*100:'0'], ['name'=>'科学研究、技术服务和地质勘查业','number'=>13,'job_amount'=>$trade_num13,'rate'=>$total>0?round($trade_num13/$total, 4)*100:'0'], ['name'=>'水利、环境和公共设施管理业','number'=>14,'job_amount'=>$trade_num14,'rate'=>$total>0?round($trade_num14/$total, 4)*100:'0'], ['name'=>'居民服务和其他服务业','number'=>15,'job_amount'=>$trade_num15,'rate'=>$total>0?round($trade_num15/$total, 4)*100:'0'], ['name'=>'教育','number'=>16,'job_amount'=>$trade_num16,'rate'=>$total>0?round($trade_num16/$total, 4)*100:'0'], ['name'=>'卫生、社会保险和社会福利业','number'=>17,'job_amount'=>$trade_num17,'rate'=>$total>0?round($trade_num17/$total, 4)*100:'0'], ['name'=>'文化、体育和娱乐业','number'=>18,'job_amount'=>$trade_num18,'rate'=>$total>0?round($trade_num18/$total, 4)*100:'0'], ['name'=>'公共管理和社会组织','number'=>19,'job_amount'=>$trade_num19,'rate'=>$total>0?round($trade_num19/$total, 4)*100:'0'], ['name'=>'国际组织','number'=>20,'job_amount'=>'0','rate'=>'0'], ]; return ['data'=>$data, 'total'=>$total]; } public function getTradeAmountByGruop($start_time, $end_time, $trades, $subsite_id) { $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]; } $rst = $this->jobsRepository->getIndustryAmount($job_where, $company_where, $trades); return $rst; } public function getEconomicAmount($start_time, $end_time, $subsite_id) { $job_where = [ ['j.created_at', '<=', $end_time], ['j.created_at', '>=', $start_time], ['j.valid', '=', 1], ['j.display', '=', 1] ]; if (config('aix.companyset.comset.show_set.jobs_display') == 1) { $job_where[] = array('j.audit', '=', 1); } else { $job_where[] = array('j.audit', '<>', 3); } $company_where = [['p.utype', '=', 1], ['p.user_status', '=', 1]]; if ($subsite_id !='-1') { $company_where[] = ['p.subsite_id', '=', $subsite_id]; } $where = 'j.deleted_at is null and p.deleted_at is null'; $nature_data = $this->getJobAmountByNature($where, $job_where, $company_where)->pluck('num', 'nature')->toArray(); $nature_data1 = 0; //企业 $nature_data2 = 0; //事业 $nature_data3 = 0; //机关 $nature_data4 = 0; //其他 $nature_total = 0; if ($nature_data) { foreach ($nature_data as $k => $v) { if ($k == 46) { $nature_data1 = $nature_data['46']; } elseif ($k == 47) { $nature_data2 = $nature_data['47']; } elseif ($k == 48) { $nature_data3 = $nature_data['48']; } else { $nature_data4 = (int)$nature_data4 + (int)$v; } $nature_total = (int)$nature_total + (int)$v; } } $nature_arr = [ ['name'=>'企业','job_amount'=>$nature_data1], ['name'=>'事业','job_amount'=>$nature_data2], ['name'=>'机关','job_amount'=>$nature_data3], ['name'=>'其他','job_amount'=>$nature_data4], ]; //按经济类型分组获取需求人数 $economy_rst = $this->getJobAmountByEconomy($where, $job_where, $company_where, [46]); $economy_data1 = 0; //国有企业 $economy_data2 = 0;//集体企业 $economy_data3 = 0;//股份合作企业 $economy_data4 = 0;//联营企业 $economy_data5 = 0;//有限责任公司 $economy_data6 = 0;//股份有限公司 $economy_data7 = 0;//私营企业 $economy_data8 = 0;//其他企业 $economy_data9 = 0;//港澳台投资企业 $economy_data10 = 0;//外商投资企业 $economy_data11 = 0;//个体经营 if ($economy_rst->toArray()) { foreach ($economy_rst->toArray() as $k => $v) { if (in_array($v->economy, [382,383,392])) { $economy_data1 = (int)$economy_data1 + (int)$v->num; } elseif (in_array($v->economy, [384])) { $economy_data2 = (int)$economy_data2 + (int)$v->num; } elseif (in_array($v->economy, [385])) { $economy_data3 = (int)$economy_data3 + (int)$v->num; } elseif (in_array($v->economy, [386,387,388,389,390])) { $economy_data4 = (int)$economy_data4 + (int)$v->num; } elseif (in_array($v->economy, [391,393])) { $economy_data5 = (int)$economy_data5 + (int)$v->num; } elseif (in_array($v->economy, [394])) { $economy_data6 = (int)$economy_data6 + (int)$v->num; } elseif (in_array($v->economy, [395,396,397,398,399])) { $economy_data7 = (int)$economy_data7 + (int)$v->num; } elseif (in_array($v->economy, [381,401,402,415,416])) { $economy_data8 = (int)$economy_data8 + (int)$v->num; } elseif (in_array($v->economy, [403,404,405,406,407,408])) { $economy_data9 = (int)$economy_data9 + (int)$v->num; } elseif (in_array($v->economy, [409,410,411,412,413,414])) { $economy_data10 = (int)$economy_data10 + (int)$v->num; } elseif (in_array($v->economy, [400])) { $economy_data11 = (int)$economy_data11 + (int)$v->num; } } } $domestic_data = (int)$economy_data1 + (int)$economy_data2+ (int)$economy_data3+ (int)$economy_data4+ (int)$economy_data5+ (int)$economy_data6+ (int)$economy_data7+ (int)$economy_data8; //dump($economy_data1); //处理数据 $data[] = ['name'=>'企业','number'=>'1','amount'=>$nature_data1,'rate'=>$nature_total>0?sprintf("%.4f", (int)$nature_data1/(int)$nature_total)*100:'0', 'padding'=>50]; $data[] = ['name'=>'其中:内资企业','number'=>'2','amount'=>$domestic_data,'rate'=>$nature_total>0?sprintf("%.4f", (int)$domestic_data/(int)$nature_total)*100:'0', 'padding'=>80]; $data[] = ['name'=>' 国有企业','number'=>'3','amount'=>$economy_data1,'rate'=>$domestic_data>0?sprintf("%.4f", (int)$economy_data1/(int)$domestic_data)*100:'0', 'padding'=>120]; $data[] = ['name'=>' 集体企业','number'=>'4','amount'=>$economy_data2,'rate'=>$domestic_data>0?sprintf("%.4f", (int)$economy_data2/(int)$domestic_data)*100:'0', 'padding'=>120]; $data[] = ['name'=>' 股份合作企业','number'=>'5','amount'=>$economy_data3,'rate'=>$domestic_data>0?sprintf("%.4f", (int)$economy_data3/(int)$domestic_data)*100:'0', 'padding'=>120]; $data[] = ['name'=>' 联营企业','number'=>'6','amount'=>$economy_data4,'rate'=>$domestic_data>0?sprintf("%.4f", (int)$economy_data4/(int)$domestic_data)*100:'0', 'padding'=>120]; $data[] = ['name'=>' 有限责任公司','number'=>'7','amount'=>$economy_data5,'rate'=>$domestic_data>0?sprintf("%.4f", (int)$economy_data5/(int)$domestic_data)*100:'0', 'padding'=>120]; $data[] = ['name'=>' 股份有限公司','number'=>'8','amount'=>$economy_data6,'rate'=>$domestic_data>0?sprintf("%.4f", (int)$economy_data6/(int)$domestic_data)*100:'0', 'padding'=>120]; $data[] = ['name'=>' 私营企业','number'=>'9','amount'=>$economy_data7,'rate'=>$domestic_data>0?sprintf("%.4f", (int)$economy_data7/(int)$domestic_data)*100:'0', 'padding'=>120]; $data[] = ['name'=>' 其他企业','number'=>'10','amount'=>$economy_data8,'rate'=>$domestic_data>0?sprintf("%.4f", (int)$economy_data8/(int)$domestic_data)*100:'0', 'padding'=>120]; $data[] = ['name'=>'港、澳、台投资企业','number'=>'11','amount'=>$economy_data9,'rate'=>$nature_data1>0?sprintf("%.4f", (int)$economy_data9/(int)$nature_data1)*100:'0', 'padding'=>80]; $data[] = ['name'=>'外商投资企业','number'=>'12','amount'=>$economy_data10,'rate'=>$nature_data1>0?sprintf("%.4f", (int)$economy_data10/(int)$nature_data1)*100:'0', 'padding'=>80]; $data[] = ['name'=>'个体经营','number'=>'13','amount'=>$economy_data11,'rate'=>$nature_data1>0?sprintf("%.4f", (int)$economy_data11/(int)$nature_data1)*100:'0', 'padding'=>80]; $data[] = ['name'=>'事业','number'=>'14','amount'=>$nature_data2,'rate'=>$nature_total>0?sprintf("%.4f", (int)$nature_data2/(int)$nature_total)*100:'0', 'padding'=>50]; $data[] = ['name'=>'机关','number'=>'15','amount'=>$nature_data3,'rate'=>$nature_total>0?sprintf("%.4f", (int)$nature_data3/(int)$nature_total)*100:'0', 'padding'=>50]; $data[] = ['name'=>'其他','number'=>'16','amount'=>$nature_data4,'rate'=>$nature_total>0?sprintf("%.4f", (int)$nature_data4/(int)$nature_total)*100:'0', 'padding'=>50]; $data[] = ['name'=>'合计','number'=>'17','amount'=>$nature_total,'rate'=>$nature_total>0?sprintf("%.4f", (int)$nature_total/(int)$nature_total)*100:'0', 'padding'=>50]; return [ 'chart_data'=>$nature_arr, 'table_data'=>$data, 'nature_total'=>$nature_total, 'domestic_data'=>$domestic_data, ]; } public function getJobAmountByEconomy($where, $job_where, $company_where, $nature_ids) { return $this->jobsRepository->getJobAmountByEconomy($where, $job_where, $company_where, $nature_ids); } public function getJobAmountByNature($where, $job_where, $company_where) { return $this->jobsRepository->getJobAmountByNature($where, $job_where, $company_where); } public function getJobTypeAmount($start_time, $end_time, $types, $subsite_id) { $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]; } $rst = $this->jobsRepository->getJobTypeAmount($job_where, $company_where, $types); return $rst; } public function getJobNumsByEducationGroup($start_time, $end_time, $subsite_id) { //需求人数 $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 = "education"; $job_fields = 'IFNULL(sum(amount),0) as num, education'; $job_order = 'education asc'; $rst = $this->getJobNumsByGroup($job_where, $company_where, $job_fields, $job_group, $job_order); return $rst; } //按年龄分组 public function getJobAmountByAge($filter, $ages, $age_text) { $age_data = []; $age_count = count($ages); //获取年龄符合条件的职位招聘人数 $job_ids = []; $job_where = []; $company_where = []; if (array_has($filter, 'job_where')) { $job_where = $filter['job_where']; } if (array_has($filter, 'company_where')) { $company_where = $filter['company_where']; } $age_where = ''; if ($ages) { foreach ($ages as $k => $v) { //组合年龄查询条件 $min_age = $v['min_age']; $max_age = $v['max_age']; if ($max_age > 0) { $age_where = "((substring_index(age,'-',1) >= $min_age) AND (substring_index(age,'-',-1) <= $max_age)) AND !(substring_index(age,'-',1) = 0 AND substring_index(age,'-',-1) = 0)"; } else { $age_where = "substring_index(age,'-',1) >= ".$min_age; } $rst = $this->jobsRepository->getJobAmountByAge($age_where, $job_where, $company_where, 'id, IFNULL(amount,0) as num')->pluck('num', 'id'); $age_data[$age_text[$k]] = $rst->sum(); $job_ids = array_merge($job_ids, $rst->keys()->toArray()); } } //获取年龄不限的职位招聘人数 $age_where = "(substring_index(age,'-',1) = 0 AND substring_index(age,'-',-1) = 0)"; $unlimit_rst = $this->jobsRepository->getJobAmountByAge($age_where, $job_where, $company_where, 'id, IFNULL(amount,0) as num')->pluck('num', 'id'); //获取年龄不限的职位招聘人数 $unlimit_amounts = $unlimit_rst->sum(); //将年龄不限的招聘人数平均分配该给个年龄段,余数分配给第一个年龄段 $unlimit_quotient = intval(floor($unlimit_amounts/$age_count)); $unlimit_remainder = $unlimit_amounts%$age_count; if ($age_data) { foreach ($age_data as $k => $v) { $age_data[$k] = (int)$v + (int)$unlimit_quotient; if ($k == key($age_data)) { $age_data[$k] = (int)$age_data[$k] + (int)$unlimit_remainder; } } } $job_ids = array_merge($job_ids, $unlimit_rst->keys()->toArray()); //获取年龄段有跨度的职位信息(剩余职位) $map = ''; if ($job_ids) { $map = 'id not in ( '.implode(',', $job_ids).' ) and amount>0'; } $lave_field= "id, IFNULL(amount,0) as num,substring_index(age,'-',1) as min_age,substring_index(age,'-',-1) as max_age"; $age_job_amount = $this->jobsRepository->getJobAmountByAges($age_data, $age_text, $ages, $map, $job_where, $company_where, $lave_field); return $age_job_amount; } public function getJobNum($where, $company_where) { $rst = $this->jobsRepository->getJobNum($where, $company_where); return $rst; } }