JobsService.php 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413
  1. <?php
  2. namespace App\Services\Statistics;
  3. use App\Repositories\JobsRepository;
  4. use App\Repositories\CategoryJobsRepository;
  5. use App\Repositories\Jobfair\JobfairPutJobRepository;
  6. use Illuminate\Support\Facades\Cache;
  7. class JobsService
  8. {
  9. protected $jobsRepository;
  10. protected $categoryJobsRepository;
  11. protected $jobfairPutJobRepository;
  12. public function __construct(JobsRepository $jobsRepository, CategoryJobsRepository $categoryJobsRepository, JobfairPutJobRepository $jobfairPutJobRepository)
  13. {
  14. $this->jobsRepository = $jobsRepository;
  15. $this->categoryJobsRepository = $categoryJobsRepository;
  16. $this->jobfairPutJobRepository = $jobfairPutJobRepository;
  17. }
  18. //获取职位分类信息
  19. public function getJobsCategoryInfo()
  20. {
  21. $result = Cache::get('jobs_cate_list');
  22. if (null === $result) {
  23. $result = $this->categoryJobsRepository->jobsCateInfoCache();
  24. Cache::put('jobs_cate_list', $result, '86400');
  25. }
  26. return $result;
  27. }
  28. public function getValidJobNum($where)
  29. {
  30. return $this->jobsRepository->getJobCount($where);
  31. }
  32. public function getJobNumGroup($where, $company_where, $group_by)
  33. {
  34. $rst = $this->jobsRepository->getJobNumGroup($where, $company_where, $group_by);
  35. return $rst->pluck('count(id)', 'DATE(created_at)')->toArray();
  36. }
  37. public function getJobNumsByGroup($where, $company_where, $fields, $group_by, $order_by = '')
  38. {
  39. $rst = $this->jobsRepository->getNumsByGroup($where, $company_where, $fields, $group_by, $order_by);
  40. return $rst->toArray();
  41. }
  42. public function getJobNumsByCategory($where, $company_where, $fields, $group_by, $order_by = '')
  43. {
  44. $rst = $this->jobsRepository->getNumsByGroup($where, $company_where, $fields, $group_by, $order_by);
  45. return $rst->pluck('num', 'cate')->toArray();
  46. }
  47. public function getJobNumByTradeGroup($where, $fields, $group_by, $order_by = '', $limit = '')
  48. {
  49. $rst = $this->jobsRepository->getJobNumByTradeGroup($where, $fields, $group_by, $order_by, $limit);
  50. return $rst->toArray();
  51. }
  52. public function getAvgWageByGroup($where, $company_where, $fields, $group_by, $order_by = '', $limit = '')
  53. {
  54. $rst = $this->jobsRepository->getAvgWageByGroup($where, $company_where, $fields, $group_by, $order_by, $limit);
  55. $list = $rst->toArray();
  56. $cates = $this->getJobsCategoryInfo();
  57. $cates = $cates['id'];
  58. if ($list) {
  59. foreach ($list as $k => $v) {
  60. if ($cates && array_has($cates, $v[$group_by])) {
  61. $list[$k]['name'] = $cates[$v[$group_by]]['name'];
  62. } else {
  63. $list[$k]['name'] = '';
  64. }
  65. }
  66. }
  67. return $list;
  68. }
  69. public function getJobsTopclass($job_where, $whereIn, $fields, $group_by, $order_by, $limit = '')
  70. {
  71. $rst = $this->jobfairPutJobRepository->getTopClassRand($job_where, $whereIn, $fields, $group_by, $order_by, $limit);
  72. $list = $rst->pluck('num', 'topclass')->toArray();
  73. $cates = $this->getJobsCategoryInfo();
  74. $cates = $cates['id'];
  75. $data = [];
  76. if ($list) {
  77. foreach ($list as $k => $v) {
  78. $data[$k]['value'] = $v;
  79. if ($cates && array_has($cates, $k)) {
  80. $data[$k]['name'] = $cates[$k]['name'];
  81. } else {
  82. $data[$k]['name'] = '';
  83. }
  84. }
  85. }
  86. return $data;
  87. }
  88. public function getIndustryAmount($job_where, $company_where, $trades)
  89. {
  90. $rst = $this->jobsRepository->getIndustryAmount($job_where, $company_where, $trades);
  91. return $rst;
  92. }
  93. public function getTradeAmount($start_time, $end_time, $subsite_id)
  94. {
  95. $trade_num1 = $this->getTradeAmountByGruop($start_time, $end_time, [44], $subsite_id);
  96. $trade_num2 = $this->getTradeAmountByGruop($start_time, $end_time, [39,40], $subsite_id);
  97. $trade_num3 = $this->getTradeAmountByGruop($start_time, $end_time, [6,7,13,14,15,16,17,18,19,21,25], $subsite_id);
  98. $trade_num4 = $this->getTradeAmountByGruop($start_time, $end_time, [41], $subsite_id);
  99. $trade_num5 = $this->getTradeAmountByGruop($start_time, $end_time, [27,28], $subsite_id);
  100. $trade_num6 = $this->getTradeAmountByGruop($start_time, $end_time, [37,38], $subsite_id);
  101. $trade_num7 = $this->getTradeAmountByGruop($start_time, $end_time, [1,2,3,4], $subsite_id);
  102. $trade_num8 = $this->getTradeAmountByGruop($start_time, $end_time, [12], $subsite_id);
  103. $trade_num9 = $this->getTradeAmountByGruop($start_time, $end_time, [35,36], $subsite_id);
  104. $trade_num10 = $this->getTradeAmountByGruop($start_time, $end_time, [9,10], $subsite_id);
  105. $trade_num11 = $this->getTradeAmountByGruop($start_time, $end_time, [26], $subsite_id);
  106. $trade_num12 = $this->getTradeAmountByGruop($start_time, $end_time, [8,11,22,23,29,31,32], $subsite_id);
  107. $trade_num13 = $this->getTradeAmountByGruop($start_time, $end_time, [34], $subsite_id);
  108. $trade_num14 = $this->getTradeAmountByGruop($start_time, $end_time, [45], $subsite_id);
  109. $trade_num15 = $this->getTradeAmountByGruop($start_time, $end_time, [30], $subsite_id);
  110. $trade_num16 = $this->getTradeAmountByGruop($start_time, $end_time, [33], $subsite_id);
  111. $trade_num17 = $this->getTradeAmountByGruop($start_time, $end_time, [20], $subsite_id);
  112. $trade_num18 = $this->getTradeAmountByGruop($start_time, $end_time, [5,24], $subsite_id);
  113. $trade_num19 = $this->getTradeAmountByGruop($start_time, $end_time, [42,43], $subsite_id);
  114. $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;
  115. $data = [
  116. ['name'=>'农、林、牧、渔业','number'=>1,'job_amount'=>$trade_num1,'rate'=>$total>0?round($trade_num1/$total, 4)*100:'0'],
  117. ['name'=>'采矿业','number'=>2,'job_amount'=>$trade_num2,'rate'=>$total>0?round($trade_num2/$total, 4)*100:'0'],
  118. ['name'=>'制造业','number'=>3,'job_amount'=>$trade_num3,'rate'=>$total>0?round($trade_num3/$total, 4)*100:'0'],
  119. ['name'=>'电力、煤气及水的生产和供应业','number'=>4,'job_amount'=>$trade_num4,'rate'=>$total>0?round($trade_num4/$total, 4)*100:'0'],
  120. ['name'=>'建筑业','number'=>5,'job_amount'=>$trade_num5,'rate'=>$total>0?round($trade_num5/$total, 4)*100:'0'],
  121. ['name'=>'交通运输、仓储及邮电通信业','number'=>6,'job_amount'=>$trade_num6,'rate'=>$total>0?round($trade_num6/$total, 4)*100:'0'],
  122. ['name'=>'信息传输、计算机服务和软件业','number'=>7,'job_amount'=>$trade_num7,'rate'=>$total>0?round($trade_num7/$total, 4)*100:'0'],
  123. ['name'=>'批发和零售业','number'=>8,'job_amount'=>$trade_num8,'rate'=>$total>0?round($trade_num8/$total, 4)*100:'0'],
  124. ['name'=>'住宿和餐饮业','number'=>9,'job_amount'=>$trade_num9,'rate'=>$total>0?round($trade_num9/$total, 4)*100:'0'],
  125. ['name'=>'金融业','number'=>10,'job_amount'=>$trade_num10,'rate'=>$total>0?round($trade_num10/$total, 4)*100:'0'],
  126. ['name'=>'房地产业','number'=>11,'job_amount'=>$trade_num11,'rate'=>$total>0?round($trade_num11/$total, 4)*100:'0'],
  127. ['name'=>'租赁和商业服务业','number'=>12,'job_amount'=>$trade_num12,'rate'=>$total>0?round($trade_num12/$total, 4)*100:'0'],
  128. ['name'=>'科学研究、技术服务和地质勘查业','number'=>13,'job_amount'=>$trade_num13,'rate'=>$total>0?round($trade_num13/$total, 4)*100:'0'],
  129. ['name'=>'水利、环境和公共设施管理业','number'=>14,'job_amount'=>$trade_num14,'rate'=>$total>0?round($trade_num14/$total, 4)*100:'0'],
  130. ['name'=>'居民服务和其他服务业','number'=>15,'job_amount'=>$trade_num15,'rate'=>$total>0?round($trade_num15/$total, 4)*100:'0'],
  131. ['name'=>'教育','number'=>16,'job_amount'=>$trade_num16,'rate'=>$total>0?round($trade_num16/$total, 4)*100:'0'],
  132. ['name'=>'卫生、社会保险和社会福利业','number'=>17,'job_amount'=>$trade_num17,'rate'=>$total>0?round($trade_num17/$total, 4)*100:'0'],
  133. ['name'=>'文化、体育和娱乐业','number'=>18,'job_amount'=>$trade_num18,'rate'=>$total>0?round($trade_num18/$total, 4)*100:'0'],
  134. ['name'=>'公共管理和社会组织','number'=>19,'job_amount'=>$trade_num19,'rate'=>$total>0?round($trade_num19/$total, 4)*100:'0'],
  135. ['name'=>'国际组织','number'=>20,'job_amount'=>'0','rate'=>'0'],
  136. ];
  137. return ['data'=>$data, 'total'=>$total];
  138. }
  139. public function getTradeAmountByGruop($start_time, $end_time, $trades, $subsite_id)
  140. {
  141. $job_where = [
  142. ['created_at', '<=', $end_time],
  143. ['created_at', '>=', $start_time],
  144. ['valid', '=', 1],
  145. ['display', '=', 1]
  146. ];
  147. if (config('aix.companyset.comset.show_set.jobs_display') == 1) {
  148. $job_where[] = array('audit', '=', 1);
  149. } else {
  150. $job_where[] = array('audit', '<>', 3);
  151. }
  152. $company_where = [
  153. ['utype', '=', 1],
  154. ['user_status', '=', 1]
  155. ];
  156. if ($subsite_id !='-1') {
  157. $company_where[] = ['subsite_id', '=', $subsite_id];
  158. }
  159. $rst = $this->jobsRepository->getIndustryAmount($job_where, $company_where, $trades);
  160. return $rst;
  161. }
  162. public function getEconomicAmount($start_time, $end_time, $subsite_id)
  163. {
  164. $job_where = [
  165. ['j.created_at', '<=', $end_time],
  166. ['j.created_at', '>=', $start_time],
  167. ['j.valid', '=', 1],
  168. ['j.display', '=', 1]
  169. ];
  170. if (config('aix.companyset.comset.show_set.jobs_display') == 1) {
  171. $job_where[] = array('j.audit', '=', 1);
  172. } else {
  173. $job_where[] = array('j.audit', '<>', 3);
  174. }
  175. $company_where = [['p.utype', '=', 1], ['p.user_status', '=', 1]];
  176. if ($subsite_id !='-1') {
  177. $company_where[] = ['p.subsite_id', '=', $subsite_id];
  178. }
  179. $where = 'j.deleted_at is null and p.deleted_at is null';
  180. $nature_data = $this->getJobAmountByNature($where, $job_where, $company_where)->pluck('num', 'nature')->toArray();
  181. $nature_data1 = 0; //企业
  182. $nature_data2 = 0; //事业
  183. $nature_data3 = 0; //机关
  184. $nature_data4 = 0; //其他
  185. $nature_total = 0;
  186. if ($nature_data) {
  187. foreach ($nature_data as $k => $v) {
  188. if ($k == 46) {
  189. $nature_data1 = $nature_data['46'];
  190. } elseif ($k == 47) {
  191. $nature_data2 = $nature_data['47'];
  192. } elseif ($k == 48) {
  193. $nature_data3 = $nature_data['48'];
  194. } else {
  195. $nature_data4 = (int)$nature_data4 + (int)$v;
  196. }
  197. $nature_total = (int)$nature_total + (int)$v;
  198. }
  199. }
  200. $nature_arr = [
  201. ['name'=>'企业','job_amount'=>$nature_data1],
  202. ['name'=>'事业','job_amount'=>$nature_data2],
  203. ['name'=>'机关','job_amount'=>$nature_data3],
  204. ['name'=>'其他','job_amount'=>$nature_data4],
  205. ];
  206. //按经济类型分组获取需求人数
  207. $economy_rst = $this->getJobAmountByEconomy($where, $job_where, $company_where, [46]);
  208. $economy_data1 = 0; //国有企业
  209. $economy_data2 = 0;//集体企业
  210. $economy_data3 = 0;//股份合作企业
  211. $economy_data4 = 0;//联营企业
  212. $economy_data5 = 0;//有限责任公司
  213. $economy_data6 = 0;//股份有限公司
  214. $economy_data7 = 0;//私营企业
  215. $economy_data8 = 0;//其他企业
  216. $economy_data9 = 0;//港澳台投资企业
  217. $economy_data10 = 0;//外商投资企业
  218. $economy_data11 = 0;//个体经营
  219. if ($economy_rst->toArray()) {
  220. foreach ($economy_rst->toArray() as $k => $v) {
  221. if (in_array($v->economy, [382,383,392])) {
  222. $economy_data1 = (int)$economy_data1 + (int)$v->num;
  223. } elseif (in_array($v->economy, [384])) {
  224. $economy_data2 = (int)$economy_data2 + (int)$v->num;
  225. } elseif (in_array($v->economy, [385])) {
  226. $economy_data3 = (int)$economy_data3 + (int)$v->num;
  227. } elseif (in_array($v->economy, [386,387,388,389,390])) {
  228. $economy_data4 = (int)$economy_data4 + (int)$v->num;
  229. } elseif (in_array($v->economy, [391,393])) {
  230. $economy_data5 = (int)$economy_data5 + (int)$v->num;
  231. } elseif (in_array($v->economy, [394])) {
  232. $economy_data6 = (int)$economy_data6 + (int)$v->num;
  233. } elseif (in_array($v->economy, [395,396,397,398,399])) {
  234. $economy_data7 = (int)$economy_data7 + (int)$v->num;
  235. } elseif (in_array($v->economy, [381,401,402,415,416])) {
  236. $economy_data8 = (int)$economy_data8 + (int)$v->num;
  237. } elseif (in_array($v->economy, [403,404,405,406,407,408])) {
  238. $economy_data9 = (int)$economy_data9 + (int)$v->num;
  239. } elseif (in_array($v->economy, [409,410,411,412,413,414])) {
  240. $economy_data10 = (int)$economy_data10 + (int)$v->num;
  241. } elseif (in_array($v->economy, [400])) {
  242. $economy_data11 = (int)$economy_data11 + (int)$v->num;
  243. }
  244. }
  245. }
  246. $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;
  247. //dump($economy_data1);
  248. //处理数据
  249. $data[] = ['name'=>'企业','number'=>'1','amount'=>$nature_data1,'rate'=>$nature_total>0?sprintf("%.4f", (int)$nature_data1/(int)$nature_total)*100:'0', 'padding'=>50];
  250. $data[] = ['name'=>'其中:内资企业','number'=>'2','amount'=>$domestic_data,'rate'=>$nature_total>0?sprintf("%.4f", (int)$domestic_data/(int)$nature_total)*100:'0', 'padding'=>80];
  251. $data[] = ['name'=>' 国有企业','number'=>'3','amount'=>$economy_data1,'rate'=>$domestic_data>0?sprintf("%.4f", (int)$economy_data1/(int)$domestic_data)*100:'0', 'padding'=>120];
  252. $data[] = ['name'=>' 集体企业','number'=>'4','amount'=>$economy_data2,'rate'=>$domestic_data>0?sprintf("%.4f", (int)$economy_data2/(int)$domestic_data)*100:'0', 'padding'=>120];
  253. $data[] = ['name'=>' 股份合作企业','number'=>'5','amount'=>$economy_data3,'rate'=>$domestic_data>0?sprintf("%.4f", (int)$economy_data3/(int)$domestic_data)*100:'0', 'padding'=>120];
  254. $data[] = ['name'=>' 联营企业','number'=>'6','amount'=>$economy_data4,'rate'=>$domestic_data>0?sprintf("%.4f", (int)$economy_data4/(int)$domestic_data)*100:'0', 'padding'=>120];
  255. $data[] = ['name'=>' 有限责任公司','number'=>'7','amount'=>$economy_data5,'rate'=>$domestic_data>0?sprintf("%.4f", (int)$economy_data5/(int)$domestic_data)*100:'0', 'padding'=>120];
  256. $data[] = ['name'=>' 股份有限公司','number'=>'8','amount'=>$economy_data6,'rate'=>$domestic_data>0?sprintf("%.4f", (int)$economy_data6/(int)$domestic_data)*100:'0', 'padding'=>120];
  257. $data[] = ['name'=>' 私营企业','number'=>'9','amount'=>$economy_data7,'rate'=>$domestic_data>0?sprintf("%.4f", (int)$economy_data7/(int)$domestic_data)*100:'0', 'padding'=>120];
  258. $data[] = ['name'=>' 其他企业','number'=>'10','amount'=>$economy_data8,'rate'=>$domestic_data>0?sprintf("%.4f", (int)$economy_data8/(int)$domestic_data)*100:'0', 'padding'=>120];
  259. $data[] = ['name'=>'港、澳、台投资企业','number'=>'11','amount'=>$economy_data9,'rate'=>$nature_data1>0?sprintf("%.4f", (int)$economy_data9/(int)$nature_data1)*100:'0', 'padding'=>80];
  260. $data[] = ['name'=>'外商投资企业','number'=>'12','amount'=>$economy_data10,'rate'=>$nature_data1>0?sprintf("%.4f", (int)$economy_data10/(int)$nature_data1)*100:'0', 'padding'=>80];
  261. $data[] = ['name'=>'个体经营','number'=>'13','amount'=>$economy_data11,'rate'=>$nature_data1>0?sprintf("%.4f", (int)$economy_data11/(int)$nature_data1)*100:'0', 'padding'=>80];
  262. $data[] = ['name'=>'事业','number'=>'14','amount'=>$nature_data2,'rate'=>$nature_total>0?sprintf("%.4f", (int)$nature_data2/(int)$nature_total)*100:'0', 'padding'=>50];
  263. $data[] = ['name'=>'机关','number'=>'15','amount'=>$nature_data3,'rate'=>$nature_total>0?sprintf("%.4f", (int)$nature_data3/(int)$nature_total)*100:'0', 'padding'=>50];
  264. $data[] = ['name'=>'其他','number'=>'16','amount'=>$nature_data4,'rate'=>$nature_total>0?sprintf("%.4f", (int)$nature_data4/(int)$nature_total)*100:'0', 'padding'=>50];
  265. $data[] = ['name'=>'合计','number'=>'17','amount'=>$nature_total,'rate'=>$nature_total>0?sprintf("%.4f", (int)$nature_total/(int)$nature_total)*100:'0', 'padding'=>50];
  266. return [
  267. 'chart_data'=>$nature_arr,
  268. 'table_data'=>$data,
  269. 'nature_total'=>$nature_total,
  270. 'domestic_data'=>$domestic_data,
  271. ];
  272. }
  273. public function getJobAmountByEconomy($where, $job_where, $company_where, $nature_ids)
  274. {
  275. return $this->jobsRepository->getJobAmountByEconomy($where, $job_where, $company_where, $nature_ids);
  276. }
  277. public function getJobAmountByNature($where, $job_where, $company_where)
  278. {
  279. return $this->jobsRepository->getJobAmountByNature($where, $job_where, $company_where);
  280. }
  281. public function getJobTypeAmount($start_time, $end_time, $types, $subsite_id)
  282. {
  283. $job_where = [
  284. ['created_at', '<=', $end_time],
  285. ['created_at', '>=', $start_time],
  286. ['valid', '=', 1],
  287. ['display', '=', 1]
  288. ];
  289. if (config('aix.companyset.comset.show_set.jobs_display') == 1) {
  290. $job_where[] = array('audit', '=', 1);
  291. } else {
  292. $job_where[] = array('audit', '<>', 3);
  293. }
  294. $company_where = [
  295. ['utype', '=', 1],
  296. ['user_status', '=', 1]
  297. ];
  298. if ($subsite_id !='-1') {
  299. $company_where[] = ['subsite_id', '=', $subsite_id];
  300. }
  301. $rst = $this->jobsRepository->getJobTypeAmount($job_where, $company_where, $types);
  302. return $rst;
  303. }
  304. public function getJobNumsByEducationGroup($start_time, $end_time, $subsite_id)
  305. {
  306. //需求人数
  307. $job_where = [
  308. ['created_at','<=',$end_time],
  309. ['created_at','>=',$start_time],
  310. ['valid','=',1],
  311. ['display','=',1]
  312. ];
  313. if (config('aix.companyset.comset.show_set.jobs_display')==1) {
  314. $job_where[] = array('audit','=',1);
  315. } else {
  316. $job_where[] = array('audit','<>',3);
  317. }
  318. $company_where = ['utype'=>1,'user_status'=>1];
  319. if ($subsite_id != -1) {
  320. $company_where[] = ['subsite_id','=',$subsite_id];
  321. }
  322. $job_group = "education";
  323. $job_fields = 'IFNULL(sum(amount),0) as num, education';
  324. $job_order = 'education asc';
  325. $rst = $this->getJobNumsByGroup($job_where, $company_where, $job_fields, $job_group, $job_order);
  326. return $rst;
  327. }
  328. //按年龄分组
  329. public function getJobAmountByAge($filter, $ages, $age_text)
  330. {
  331. $age_data = [];
  332. $age_count = count($ages);
  333. //获取年龄符合条件的职位招聘人数
  334. $job_ids = [];
  335. $job_where = [];
  336. $company_where = [];
  337. if (array_has($filter, 'job_where')) {
  338. $job_where = $filter['job_where'];
  339. }
  340. if (array_has($filter, 'company_where')) {
  341. $company_where = $filter['company_where'];
  342. }
  343. $age_where = '';
  344. if ($ages) {
  345. foreach ($ages as $k => $v) {
  346. //组合年龄查询条件
  347. $min_age = $v['min_age'];
  348. $max_age = $v['max_age'];
  349. if ($max_age > 0) {
  350. $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)";
  351. } else {
  352. $age_where = "substring_index(age,'-',1) >= ".$min_age;
  353. }
  354. $rst = $this->jobsRepository->getJobAmountByAge($age_where, $job_where, $company_where, 'id, IFNULL(amount,0) as num')->pluck('num', 'id');
  355. $age_data[$age_text[$k]] = $rst->sum();
  356. $job_ids = array_merge($job_ids, $rst->keys()->toArray());
  357. }
  358. }
  359. //获取年龄不限的职位招聘人数
  360. $age_where = "(substring_index(age,'-',1) = 0 AND substring_index(age,'-',-1) = 0)";
  361. $unlimit_rst = $this->jobsRepository->getJobAmountByAge($age_where, $job_where, $company_where, 'id, IFNULL(amount,0) as num')->pluck('num', 'id');
  362. //获取年龄不限的职位招聘人数
  363. $unlimit_amounts = $unlimit_rst->sum();
  364. //将年龄不限的招聘人数平均分配该给个年龄段,余数分配给第一个年龄段
  365. $unlimit_quotient = intval(floor($unlimit_amounts/$age_count));
  366. $unlimit_remainder = $unlimit_amounts%$age_count;
  367. if ($age_data) {
  368. foreach ($age_data as $k => $v) {
  369. $age_data[$k] = (int)$v + (int)$unlimit_quotient;
  370. if ($k == key($age_data)) {
  371. $age_data[$k] = (int)$age_data[$k] + (int)$unlimit_remainder;
  372. }
  373. }
  374. }
  375. $job_ids = array_merge($job_ids, $unlimit_rst->keys()->toArray());
  376. //获取年龄段有跨度的职位信息(剩余职位)
  377. $map = '';
  378. if ($job_ids) {
  379. $map = 'id not in ( '.implode(',', $job_ids).' ) and amount>0';
  380. }
  381. $lave_field= "id, IFNULL(amount,0) as num,substring_index(age,'-',1) as min_age,substring_index(age,'-',-1) as max_age";
  382. $age_job_amount = $this->jobsRepository->getJobAmountByAges($age_data, $age_text, $ages, $map, $job_where, $company_where, $lave_field);
  383. return $age_job_amount;
  384. }
  385. public function getJobNum($where, $company_where)
  386. {
  387. $rst = $this->jobsRepository->getJobNum($where, $company_where);
  388. return $rst;
  389. }
  390. }