| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413 | 
							- <?php
 
- namespace App\Services\Statistics;
 
- use App\Repositories\JobsRepository;
 
- use App\Repositories\CategoryJobsRepository;
 
- use App\Repositories\Jobfair\JobfairPutJobRepository;
 
- use Illuminate\Support\Facades\Cache;
 
- class JobsService
 
- {
 
-     protected $jobsRepository;
 
-     protected $categoryJobsRepository;
 
-     protected $jobfairPutJobRepository;
 
-     public function __construct(JobsRepository $jobsRepository, CategoryJobsRepository $categoryJobsRepository, JobfairPutJobRepository $jobfairPutJobRepository)
 
-     {
 
-         $this->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;
 
-     }
 
- }
 
 
  |