DemandController.php 66 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494
  1. <?php
  2. namespace App\Http\Controllers\Statistics;
  3. use App\Admin\Exports\Caiqing\TechLevelExport;
  4. use App\Http\Controllers\Statistics\StatisticsBaseController;
  5. use Illuminate\Http\Request;
  6. use App\Services\Statistics\CompanyService;
  7. use App\Services\Statistics\JobsService;
  8. use App\Services\Statistics\ResumeService;
  9. use App\Services\Statistics\MemberService;
  10. use App\Services\Statistics\CategoryService;
  11. use App\Services\Common\SearchService;
  12. use Illuminate\Support\Collection;
  13. use App\Admin\Exports\Caiqing\OverallExport;
  14. use App\Admin\Exports\Caiqing\JobGapExport;
  15. use App\Admin\Exports\Caiqing\ResumeGapExport;
  16. use App\Admin\Exports\Caiqing\IndustryExport;
  17. use App\Admin\Exports\Caiqing\TradeExport;
  18. use App\Admin\Exports\Caiqing\CompanyTypeExport;
  19. use App\Admin\Exports\Caiqing\TypeExport;
  20. use App\Admin\Exports\Caiqing\EducationExport;
  21. use App\Admin\Exports\Caiqing\PersonTypeExport;
  22. use App\Admin\Exports\Caiqing\AgeExport;
  23. class DemandController extends StatisticsBaseController
  24. {
  25. protected $jobsService;
  26. protected $resumeService;
  27. protected $memberService;
  28. protected $companyService;
  29. protected $apply_state;
  30. protected $searchService;
  31. protected $categoryService;
  32. /**
  33. * DemandController constructor.
  34. */
  35. public function __construct(JobsService $jobsService, ResumeService $resumeService, MemberService $memberService, CompanyService $companyService, SearchService $searchService, CategoryService $categoryService)
  36. {
  37. $this->jobsService = $jobsService;
  38. $this->resumeService = $resumeService;
  39. $this->memberService = $memberService;
  40. $this->companyService = $companyService;
  41. $this->searchService = $searchService;
  42. $this->categoryService = $categoryService;
  43. $this->apply_state = ['1' => '合适', '2' => '不合适', '3' => '待定', '4' => '未接通'];
  44. }
  45. public function index(Request $request)
  46. {
  47. $subsite_id = session('caiqing_susbite_id');
  48. if ($subsite_id === null) {
  49. $subsite_id = -1;
  50. }
  51. //近1年的起始时间
  52. $end_date = date('Y-m', time());
  53. $end_time = date("Y-m-d H:i:s", strtotime("$end_date +1 month")-1);
  54. $start_time = date("Y-m-d H:i:s", strtotime("$end_date -11 month"));
  55. //需求人数(职位人数总和)
  56. $job_where = [
  57. ['created_at','<=',$end_time],
  58. ['created_at','>=',$start_time],
  59. ['valid','=',1],
  60. ['display','=',1]
  61. ];
  62. if (config('aix.companyset.comset.show_set.jobs_display')==1) {
  63. $job_where[] = array('audit','=',1);
  64. } else {
  65. $job_where[] = array('audit','<>',3);
  66. }
  67. $company_where = ['utype'=>1,'user_status'=>1];
  68. if ($subsite_id != -1) {
  69. $company_where[] = ['subsite_id','=',$subsite_id];
  70. }
  71. $job_group = "create_month";
  72. $job_fields = 'count(id),sum(amount) as num,date_format(created_at, "%y-%m") as create_month';
  73. $job_order = 'create_month asc';
  74. $jobs_rst = $this->jobsService->getJobNumsByGroup($job_where, $company_where, $job_fields, $job_group, $job_order);
  75. $jobs_res = [];
  76. if ($jobs_rst) {
  77. foreach ($jobs_rst as $k => $v) {
  78. $jobs_res[$v['create_month']] = $v['num']?$v['num']:0;
  79. }
  80. }
  81. //求职人数(简历数量)
  82. $resume_where = [
  83. ['created_at', '<=', $end_time],
  84. ['created_at', '>=', $start_time],
  85. ];
  86. if (config('aix.personal_set.per_set.show_set.resume_display')=='1') {
  87. $resume_where[] = array('audit','=','2');
  88. } else {
  89. $resume_where[] = array('audit','<>','0');
  90. }
  91. $member_where = array(
  92. ['utype','=',2],
  93. ['status','=',1]
  94. );
  95. if ($subsite_id != -1) {
  96. $member_where[] = ['subsite_id','=',$subsite_id];
  97. }
  98. $resume_group = "create_month";
  99. $resume_fields = 'count(id) as num,date_format(created_at, "%y-%m") as create_month';
  100. $resume_order = 'create_month asc';
  101. $resume_rst = $this->resumeService->getResumeNumsByGroup($resume_where, $member_where, $resume_fields, $resume_group, $resume_order);
  102. //求人倍率(需求人数/求职人数)
  103. $start_date = date("Y-m", strtotime($start_time));
  104. $date_arr = [];
  105. $multiple = [];
  106. $job_num = [];
  107. $resume_num = [];
  108. for ($i=0; $i<12; $i++) {
  109. $start = date("y.n", strtotime($start_date));
  110. $s_date = date("y-m", strtotime($start_date));
  111. $date_arr[] = $start;
  112. if (!array_has($jobs_res, $s_date)) {
  113. $job_num[$start] = 0;
  114. } else {
  115. $job_num[$start] = $jobs_res[$s_date];
  116. }
  117. if (!array_has($resume_rst, $s_date)) {
  118. $resume_num[$start] = 0;
  119. } else {
  120. $resume_num[$start] = $resume_rst[$s_date];
  121. }
  122. $jnum = $job_num[$start];
  123. $rnum = $resume_num[$start];
  124. if ($jnum==0 || $rnum==0) {
  125. $multiple[$start] = 0;
  126. } else {
  127. $multiple[$start] = sprintf("%.2f", (int)$jnum/(int)$rnum);
  128. }
  129. $start_date = date("Y-m", strtotime("$start_date +1 month"));
  130. }
  131. $return_data = [
  132. 'jobs_data' => $job_num,
  133. 'resume_data' => $resume_num,
  134. 'multiple' => $multiple,
  135. 'date_arr' => $date_arr,
  136. 'job_total' => array_sum($job_num),
  137. 'resume_total'=> array_sum($resume_num),
  138. ];
  139. if ($request->input('isExcel')==1) {
  140. $data = [];
  141. if ($date_arr) {
  142. foreach ($date_arr as $k => $v) {
  143. $job_amount = array_has($job_num, $v)?$job_num[$v]:'0';
  144. $resume_amount = array_has($resume_num, $v)?$resume_num[$v]:'0';
  145. $multiple = '0';
  146. if ($job_amount==0 || $resume_amount==0) {
  147. $multiple = '0';
  148. } else {
  149. $multiple = sprintf("%.2f", (int)$job_amount/(int)$resume_amount);
  150. }
  151. $data[] = ['date_time'=>$v,'job_num'=>$job_amount.'','resume_num'=>$resume_amount.'','multiple'=>$multiple];
  152. }
  153. //合计
  154. $all_multiple = 0;
  155. if ($resume_num > 0) {
  156. $all_multiple = sprintf("%.2f", (int)array_sum($job_num)/(int)array_sum($resume_num));
  157. }
  158. $data[] = ['date_time'=>'合计','job_num'=>array_sum($job_num).'','resume_num'=>array_sum($resume_num).'','multiple'=>$all_multiple];
  159. }
  160. //导出文件
  161. $export = new OverallExport('总体分析 - 近一年的供求情况');
  162. $c = new Collection($data);
  163. $export->setCustomerData($c)->export();
  164. } else {
  165. return view('statistics.app.demand.basic_analysis', $return_data);
  166. }
  167. }
  168. public function compareEducation(Request $request)
  169. {
  170. $subsite_id = session('caiqing_susbite_id');
  171. if ($subsite_id === null) {
  172. $subsite_id = -1;
  173. }
  174. //时间过滤
  175. $date_aprams = $this->getDateParams($request->all());
  176. $start_time = date('Y-m-d H:i:s', strtotime($date_aprams['start_year'].'-'.$date_aprams['start_month']));
  177. $EndDate = date('Y-m-d H:i:s', strtotime($date_aprams['end_year'].'-'.$date_aprams['end_month']));
  178. $end_time = date('Y-m-d H:i:s', strtotime("$EndDate +1 month")-1);
  179. //获取文化程度数据 + 无要求
  180. $cates = $this->companyService->getCategories(['AIX_education'=>100]);
  181. $edu_cates = [];
  182. if (array_has($cates, 'AIX_education')) {
  183. $edu_cates = $cates['AIX_education'];
  184. $edu_cates['0'] = ['id'=>0, 'demand'=>'无要求'];
  185. }
  186. //获取需求信息
  187. $job_where = array(
  188. array('valid','=','1'),
  189. array('display','=',1),
  190. array('created_at','>=',$start_time),
  191. array('created_at','<=',$end_time)
  192. );
  193. if (config('aix.companyset.comset.show_set.jobs_display')==1) {
  194. $job_where[] = array('audit','=',1);
  195. } else {
  196. $job_where[] = array('audit','<>',3);
  197. }
  198. $company_where = ['utype'=>1,'user_status'=>1];
  199. if ($subsite_id != -1) {
  200. $job_where[] = ['subsite_id','=',$subsite_id];
  201. $company_where[] = ['subsite_id','=',$subsite_id];
  202. }
  203. $edu_fields = 'sum(amount) as num, education';
  204. $edu_group = 'education';
  205. $edu_order = 'education asc';
  206. $edu_rst = $this->jobsService->getJobNumsByGroup($job_where, $company_where, $edu_fields, $edu_group, $edu_order);
  207. $job_data = [];
  208. if ($edu_rst) {
  209. foreach ($edu_rst as $k => $v) {
  210. $job_data[$v['education']] = $v['num'];
  211. }
  212. }
  213. //获取求职人数
  214. $member_where = [
  215. ['m.utype','=',2],
  216. ['m.status','=',1],
  217. ['r.created_at','>=',$start_time],
  218. ['r.created_at','<=',$end_time]
  219. ];
  220. if ($subsite_id !='-1') {
  221. $member_where[] = ['m.subsite_id','=',$subsite_id];
  222. }
  223. $edu_fields = 'count(r.id) as num, mi.education,mi.education_cn';
  224. $edu_group = 'mi.education';
  225. $where_str = 'm.deleted_at IS NULL AND mi.deleted_at IS NULL AND r.deleted_at IS NULL';
  226. if (config('aix.personal_set.per_set.show_set.resume_display')=='1') {
  227. $member_where[] = array('r.audit','=','2');
  228. } else {
  229. $member_where[] = array('r.audit','<>','0');
  230. }
  231. //学历分布
  232. $resume_rst = $this->memberService->getJobSeekersByGroup($member_where, $where_str, $edu_fields, $edu_group);
  233. $resume_data = $resume_rst->pluck('num', 'education')->toArray();
  234. $table_data = [];
  235. if ($edu_cates) {
  236. foreach ($edu_cates as $k => $v) {
  237. $job_num = array_has($job_data, $k)?$job_data[$k]:0;
  238. $resume_num = array_has($resume_data, $k)?$resume_data[$k]:0;
  239. if ($resume_num==0 || $job_num==0) {
  240. $rate = 0;
  241. } else {
  242. $rate = $resume_num>0?sprintf("%.2f", (int)$job_num/(int)$resume_num):'0';
  243. }
  244. $table_data[] = ['education'=>$k,'education_cn'=>$v['demand'], 'job_num'=>$job_num?$job_num:0, 'resume_num'=>$resume_num?$resume_num:0, 'rate'=>$rate];
  245. }
  246. }
  247. $return_data = [
  248. 'date_aprams' => $date_aprams,
  249. 'action_name' => app('request')->route()->getName(),
  250. 'data' => $table_data,
  251. 'resume_total' => array_sum($resume_data),
  252. 'job_total' => array_sum($job_data)
  253. ];
  254. return view('statistics.app.demand.education_compare', $return_data);
  255. }
  256. //需求大于求职缺口最大的前十个职业(二级分类)
  257. public function jobGap(Request $request)
  258. {
  259. $subsite_id = session('caiqing_susbite_id');
  260. if ($subsite_id === null) {
  261. $subsite_id = -1;
  262. }
  263. //时间过滤
  264. $date_aprams = $this->getDateParams($request->all());
  265. $start_time = date('Y-m-d H:i:s', strtotime($date_aprams['start_year'].'-'.$date_aprams['start_month']));
  266. $EndDate = date('Y-m-d H:i:s', strtotime($date_aprams['end_year'].'-'.$date_aprams['end_month']));
  267. $end_time = date('Y-m-d H:i:s', strtotime("$EndDate +1 month")-1);
  268. //根据二级分类分组计算需求人数
  269. $job_where = [
  270. ['created_at', '<=', $end_time],
  271. ['created_at', '>=', $start_time],
  272. ['valid', '=', 1],
  273. ['display', '=', 1],
  274. ['category','<>',0]
  275. ];
  276. if (config('aix.companyset.comset.show_set.jobs_display') == 1) {
  277. $job_where[] = array('audit', '=', 1);
  278. } else {
  279. $job_where[] = array('audit', '<>', 3);
  280. }
  281. $company_where = [
  282. ['utype', '=', 1],
  283. ['user_status', '=', 1]
  284. ];
  285. if ($subsite_id != -1) {
  286. $company_where['subsite_id'] = $subsite_id;
  287. }
  288. $job_field = "IFNULL(sum(amount),0) as num,category,CONCAT_WS('.',topclass,category) as cate";
  289. $job_group = 'category';
  290. $job_rst = $this->jobsService->getJobNumsByCategory($job_where, $company_where, $job_field, $job_group);
  291. //获取求职人数(统计简历数量)
  292. $resume_where = [
  293. ['created_at', '<=', $end_time],
  294. ['created_at', '>=', $start_time],
  295. ];
  296. if (config('aix.personal_set.per_set.show_set.resume_display')=='1') {
  297. $resume_where[] = array('audit','=','2');
  298. } else {
  299. $resume_where[] = array('audit','<>','0');
  300. }
  301. $member_where = array(
  302. ['utype','=',2],
  303. ['status','=',1]
  304. );
  305. if ($subsite_id != -1) {
  306. //$resume_where[] = ['subsite_id','=',$subsite_id];
  307. $member_where[] = ['subsite_id','=',$subsite_id];
  308. }
  309. $resume_group = "job_cate";
  310. $resume_fields = "count(id) as num,SUBSTRING_INDEX(intention_jobs_id, '.', 2) as job_cate";
  311. $resume_order = '';
  312. $resume_rst = $this->resumeService->getResumeNumsGroup($resume_where, $member_where, $resume_fields, $resume_group, $resume_order);
  313. $resume_data = $resume_rst->pluck('num', 'job_cate')->toArray();
  314. //处理数据
  315. $table_data = [];
  316. if ($job_rst) {
  317. foreach ($job_rst as $k => $v) {
  318. $resume_num = 0;
  319. if (array_has($resume_data, $k)) {
  320. $resume_num = $resume_data[$k];
  321. }
  322. if ($v > $resume_num) {
  323. $rate = sprintf("%.2f", $resume_num>0?((int)$v/(int)$resume_num):'0');
  324. $table_data[$k] = ['cate'=>$k,'job_num'=>$v, 'resume_num'=>$resume_num, 'gap'=>$v-$resume_num, 'rate'=>$rate];
  325. }
  326. }
  327. }
  328. //根据缺口对排序二维数组进行排序
  329. usort($table_data, function ($a, $b) {
  330. if ($a['gap'] == $b['gap']) {
  331. return 0;
  332. }
  333. return ($a['gap'] > $b['gap']) ? -1 : 1;
  334. });
  335. $data = array_slice($table_data, 0, 10); //保留数组里前10条元素
  336. //处理职位分类名称
  337. $res_data = $this->resumeService->dealJobCategory($data);
  338. $return_data = [
  339. 'date_aprams' => $date_aprams,
  340. 'action_name' => app('request')->route()->getName(),
  341. 'res_data' => $res_data
  342. ];
  343. if ($request->input('isExcel')==1) {
  344. //导出文件
  345. if ($res_data) {
  346. $total_job = 0;
  347. $total_resume = 0;
  348. foreach ($res_data as $k => $v) {
  349. $total_job = (int)$total_job + (int)$v['job_num'];
  350. $total_resume = (int)$total_resume + (int)$v['resume_num'];
  351. }
  352. //合计
  353. $total_gap = $total_job - $total_resume;
  354. $total_rate = 0;
  355. if ($total_resume>0) {
  356. $total_rate = sprintf("%.2f", ((int)$total_job/(int)$total_resume));
  357. }
  358. $res_data[] = ['cate_name'=>'合计','job_num'=>$total_job, 'resume_num'=>$total_resume, 'gap'=>$total_gap, 'rate'=>$total_rate];
  359. }
  360. $export = new JobGapExport("总体分析 - ".$date_aprams['start_year']."年".$date_aprams['start_month']."月到".$date_aprams['end_year']."年".$date_aprams['end_month']."月求职缺口最大的前十个职业");
  361. $c = new Collection($res_data);
  362. $export->setCustomerData($c)->export();
  363. } else {
  364. return view('statistics.app.demand.job_gap', $return_data);
  365. }
  366. }
  367. //求职缺口 简历数量大于职位招聘数量(二级分类)
  368. public function resumeGap(Request $request)
  369. {
  370. $subsite_id = session('caiqing_susbite_id');
  371. if ($subsite_id === null) {
  372. $subsite_id = -1;
  373. }
  374. //时间过滤
  375. $date_aprams = $this->getDateParams($request->all());
  376. $start_time = date('Y-m-d H:i:s', strtotime($date_aprams['start_year'].'-'.$date_aprams['start_month']));
  377. $EndDate = date('Y-m-d H:i:s', strtotime($date_aprams['end_year'].'-'.$date_aprams['end_month']));
  378. $end_time = date('Y-m-d H:i:s', strtotime("$EndDate +1 month")-1);
  379. //获取求职人数(统计简历数量)
  380. $resume_where = [
  381. ['created_at', '<=', $end_time],
  382. ['created_at', '>=', $start_time],
  383. ];
  384. if (config('aix.personal_set.per_set.show_set.resume_display')=='1') {
  385. $resume_where[] = array('audit','=','2');
  386. } else {
  387. $resume_where[] = array('audit','<>','0');
  388. }
  389. $member_where = array(
  390. ['utype','=',2],
  391. ['status','=',1]
  392. );
  393. if ($subsite_id != -1) {
  394. $member_where[] = ['subsite_id','=',$subsite_id];
  395. }
  396. $resume_group = "job_cate";
  397. $resume_fields = "count(id) as num,SUBSTRING_INDEX(intention_jobs_id, '.', 2) as job_cate";
  398. $resume_order = '';
  399. $resume_rst = $this->resumeService->getResumeNumsGroup($resume_where, $member_where, $resume_fields, $resume_group, $resume_order);
  400. $resume_data = $resume_rst->pluck('num', 'job_cate')->toArray();
  401. $job_where = [
  402. ['created_at', '<=', $end_time],
  403. ['created_at', '>=', $start_time],
  404. ['valid', '=', 1],
  405. ['display', '=', 1],
  406. ['category','<>',0]
  407. ];
  408. if (config('aix.companyset.comset.show_set.jobs_display') == 1) {
  409. $job_where[] = array('audit', '=', 1);
  410. } else {
  411. $job_where[] = array('audit', '<>', 3);
  412. }
  413. $company_where = [
  414. ['utype', '=', 1],
  415. ['user_status', '=', 1]
  416. ];
  417. if ($subsite_id != -1) {
  418. $company_where['subsite_id'] = $subsite_id;
  419. }
  420. $job_field = "IFNULL(sum(amount),0) as num,CONCAT_WS('.',topclass,category) as cate";
  421. $job_group = 'category';
  422. $job_rst = $this->jobsService->getJobNumsByCategory($job_where, $company_where, $job_field, $job_group);
  423. //处理数据
  424. $data = [];
  425. if ($resume_data) {
  426. foreach ($resume_data as $k => $v) {
  427. $job_num = 0;
  428. if (array_has($job_rst, $k)) {
  429. $job_num = $job_rst[$k];
  430. }
  431. if ($v > $job_num) {
  432. $rate = sprintf("%.2f", $v>0?((int)$job_num/(int)$v):'0');
  433. $data[$k] = ['cate'=>$k,'job_num'=>$job_num, 'resume_num'=>$v, 'gap'=>$v-$job_num, 'rate'=>$rate];
  434. }
  435. }
  436. }
  437. //根据缺口对排序二维数组进行排序
  438. usort($data, function ($a, $b) {
  439. if ($a['gap'] == $b['gap']) {
  440. return 0;
  441. }
  442. return ($a['gap'] > $b['gap']) ? -1 : 1;
  443. });
  444. $table_data = array_slice($data, 0, 10); //保留数组里前10条元素
  445. //处理职位分类名称
  446. $res_data = $this->resumeService->dealJobCategory($table_data);
  447. $return_data = [
  448. 'date_aprams' => $date_aprams,
  449. 'action_name' => app('request')->route()->getName(),
  450. 'res_data' => $res_data
  451. ];
  452. if ($request->input('isExcel')==1) {
  453. if ($res_data) {
  454. $total_job = 0;
  455. $total_resume = 0;
  456. $total_gap = 0;
  457. foreach ($res_data as $k => $v) {
  458. $total_job = $total_job + (int)$v['job_num'];
  459. $total_resume = $total_resume + (int)$v['resume_num'];
  460. }
  461. $total_gap = $total_resume - $total_job;
  462. $total_rate = 0;
  463. if ($total_resume>0) {
  464. $total_rate = sprintf("%.2f", ((int)$total_job/(int)$total_resume));
  465. }
  466. $res_data[] = ['cate_name'=>'合计','job_num'=>$total_job, 'resume_num'=>$total_resume, 'gap'=>$total_gap, 'rate'=>$total_rate];
  467. }
  468. //导出文件
  469. $export = new ResumeGapExport("总体分析 - ".$date_aprams['start_year']."年".$date_aprams['start_month']."月到".$date_aprams['end_year']."年".$date_aprams['end_month']."月需求缺口最大的前十个职业");
  470. $c = new Collection($res_data);
  471. $export->setCustomerData($c)->export();
  472. } else {
  473. return view('statistics.app.demand.resume_gap', $return_data);
  474. }
  475. }
  476. public function dealResume(Request $request)
  477. {
  478. //过滤投递的企业所在分站
  479. $subsite_id = session('caiqing_susbite_id');
  480. if ($subsite_id === null) {
  481. $subsite_id = -1;
  482. }
  483. //时间过滤
  484. $date_aprams = $this->getDateParams($request->all());
  485. $date_aprams = $this->getDateDetail($request->all());
  486. $start_time = $date_aprams['start_date']?date('Y-m-d H:i:s', strtotime($date_aprams['start_date'])):$date_aprams['start_date'];
  487. $end_time = date('Y-m-d H:i:s', strtotime($date_aprams['end_date'].' +1 day')-1);
  488. $company_where = [['utype','=','1'],['audit','<>','3']/*['user_status','=','1']*/];
  489. if ($subsite_id != '-1') {
  490. $company_where[] = ['subsite_id','=',$subsite_id];
  491. }
  492. //获取简历投递数量
  493. $apply_where = [
  494. ['created_at', '<=', $end_time],
  495. ['created_at', '>=', $start_time]
  496. ];
  497. $apply_nums = $this->resumeService->getApplyNum($apply_where, $company_where);
  498. //获取已处理简历数
  499. $processed_where = [
  500. ['created_at', '<=', $end_time],
  501. ['created_at', '>=', $start_time],
  502. ['is_reply', '>', 0]
  503. ];
  504. $processed_nums = $this->resumeService->getApplyNum($processed_where, $company_where);
  505. //获取待处理简历数
  506. $unprocessed_where = [
  507. ['created_at', '<=', $end_time],
  508. ['created_at', '>=', $start_time],
  509. ['is_reply', '=', 0]
  510. ];
  511. $unprocessed_nums = $this->resumeService->getApplyNum($unprocessed_where, $company_where);
  512. //已处理简历分组情况
  513. $processed_rst = $this->resumeService->getApplyNumByGroup($processed_where, $company_where, 'count(id) as count, is_reply', ['is_reply'], 'is_reply asc');
  514. $processed_res = $processed_rst->pluck('count', 'is_reply')->toArray();
  515. $apply_state = $this->apply_state;
  516. $processed_arr = [];
  517. foreach ($apply_state as $k => $v) {
  518. $count = 0;
  519. if (array_has($processed_res, $k)) {
  520. $count = $processed_res[$k];
  521. }
  522. $processed_arr[$k] = ['name'=>$v.'简历数', 'count'=>$count];
  523. }
  524. //获取简历未处理数量前10的企业和简历数量
  525. $unprocessed_companys = $this->resumeService->getApplyNumByCompanyGroup($unprocessed_where, $company_where, 'count(id) as count, company_id', ['company_id'], 'count(id) desc', 10);
  526. //简历合适前20企业
  527. $apt_where = array(
  528. array('created_at', '<=', $end_time),
  529. array('created_at', '>=', $start_time),
  530. array('is_reply', '=', 1)
  531. );
  532. $apt_companys = $this->resumeService->getApplyNumByCompanyGroup($apt_where, $company_where, 'count(id) as count, company_id', ['company_id'], 'count(id) desc', 20);
  533. $return_data = [
  534. 'date_aprams' => $date_aprams,
  535. 'action_name' => app('request')->route()->getName(),
  536. 'apply_nums' => $apply_nums,
  537. 'processed_nums' => $processed_nums,
  538. 'unprocessed_nums' => $unprocessed_nums,
  539. 'processed_arr' => $processed_arr,
  540. 'unprocessed_companys' => $unprocessed_companys,
  541. 'apt_companys' => $apt_companys
  542. ];
  543. return view('statistics.app.demand.resume_deal', $return_data);
  544. }
  545. public function applyCompany(Request $request)
  546. {
  547. $subsite_id = session('caiqing_susbite_id');
  548. if ($subsite_id === null) {
  549. $subsite_id = -1;
  550. }
  551. //时间过滤
  552. $date_aprams = $this->getDateDetail($request->all());
  553. $start_time = $date_aprams['start_date']?date('Y-m-d H:i:s', strtotime($date_aprams['start_date'])):$date_aprams['start_date'];
  554. $end_time = date('Y-m-d H:i:s', strtotime($date_aprams['end_date'].' +1 day')-1);
  555. $company_where = [['utype','=','1'],['user_status','=','1']];
  556. if ($subsite_id != '-1') {
  557. $company_where[] = ['subsite_id','=',$subsite_id];
  558. }
  559. $apply_where = [
  560. ['created_at', '<=', $end_time],
  561. ['created_at', '>=', $start_time]
  562. ];
  563. //获取简历未处理数量前50的企业和简历数量
  564. $company_applys = $this->resumeService->getApplyNumByCompanyGroup($apply_where, $company_where, 'count(id) as count, company_id', ['company_id'], 'count(id) desc', 50);
  565. $return_data = [
  566. 'date_aprams' => $date_aprams,
  567. 'action_name' => app('request')->route()->getName(),
  568. 'company_applys' => $company_applys
  569. ];
  570. return view('statistics.app.demand.company_apply', $return_data);
  571. }
  572. //按产业分组
  573. public function industry(Request $request)
  574. {
  575. $subsite_id = session('caiqing_susbite_id');
  576. if ($subsite_id === null) {
  577. $subsite_id = -1;
  578. }
  579. //时间过滤
  580. $date_aprams = $this->getDateParams($request->all());
  581. $start_time = date('Y-m-d H:i:s', strtotime($date_aprams['start_year'].'-'.$date_aprams['start_month']));
  582. $EndDate = date('Y-m-d H:i:s', strtotime($date_aprams['end_year'].'-'.$date_aprams['end_month']));
  583. $end_time = date('Y-m-d H:i:s', strtotime("$EndDate +1 month")-1);
  584. //分别获取第一产业、第二产业和第三产业数据
  585. $job_where = [
  586. ['created_at', '<=', $end_time],
  587. ['created_at', '>=', $start_time],
  588. ['valid', '=', 1],
  589. ['display', '=', 1]
  590. ];
  591. if (config('aix.companyset.comset.show_set.jobs_display') == 1) {
  592. $job_where[] = array('audit', '=', 1);
  593. } else {
  594. $job_where[] = array('audit', '<>', 3);
  595. }
  596. $company_where = [
  597. ['utype', '=', 1],
  598. ['user_status', '=', 1]
  599. ];
  600. if ($subsite_id != '-1') {
  601. $company_where['subsite_id'] = $subsite_id;
  602. }
  603. $first_industry_num = $this->jobsService->getIndustryAmount($job_where, $company_where, [44]);
  604. $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]);
  605. $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]);
  606. $total_num = (int)$first_industry_num + (int)$second_industry_num + (int)$third_industry_num;
  607. $table_data = [
  608. ['name'=>'第一产业', 'value'=>$first_industry_num, 'rate'=> $total_num>0?sprintf("%.4f", (int)$first_industry_num/(int)$total_num)*100:0.00],
  609. ['name'=>'第二产业', 'value'=>$second_industry_num , 'rate'=> $total_num>0?sprintf("%.4f", (int)$second_industry_num/(int)$total_num)*100:0.00],
  610. ['name'=>'第三产业', 'value'=>$third_industry_num , 'rate'=> $total_num>0?sprintf("%.4f", (int)$third_industry_num/(int)$total_num)*100:0.00]
  611. ];
  612. $return_data = [
  613. 'date_aprams' => $date_aprams,
  614. 'action_name' => app('request')->route()->getName(),
  615. 'table_data' => $table_data,
  616. 'total_num' => $total_num
  617. ];
  618. if ($request->input('isExcel')==1) {
  619. if ($table_data) {
  620. $rate = 0;
  621. if ($total_num>0) {
  622. $rate = 100;
  623. }
  624. $table_data[] = ['name'=>'合计','value'=>$total_num, 'rate'=>$rate];
  625. }
  626. //导出文件
  627. $export = new IndustryExport("总体分析 - ".$date_aprams['start_year']."年".$date_aprams['start_month']."月到".$date_aprams['end_year']."年".$date_aprams['end_month']."月按产业分组的需求人数");
  628. $c = new Collection($table_data);
  629. $export->setCustomerData($c)->export();
  630. } else {
  631. return view('statistics.app.demand.industry', $return_data);
  632. }
  633. }
  634. //按行业分组
  635. public function tradeGroup(Request $request)
  636. {
  637. $subsite_id = session('caiqing_susbite_id');
  638. if ($subsite_id === null) {
  639. $subsite_id = -1;
  640. }
  641. //时间过滤
  642. $date_aprams = $this->getDateParams($request->all());
  643. $start_time = date('Y-m-d H:i:s', strtotime($date_aprams['start_year'].'-'.$date_aprams['start_month']));
  644. $EndDate = date('Y-m-d H:i:s', strtotime($date_aprams['end_year'].'-'.$date_aprams['end_month']));
  645. $end_time = date('Y-m-d H:i:s', strtotime("$EndDate +1 month")-1);
  646. $rst = $this->jobsService->getTradeAmount($start_time, $end_time, $subsite_id);
  647. $return_data = [
  648. 'date_aprams' => $date_aprams,
  649. 'action_name' => app('request')->route()->getName(),
  650. 'table_data' => $rst['data'],
  651. 'total_amount' => $rst['total']
  652. ];
  653. if ($request->input('isExcel')==1) {
  654. $export_data = $rst['data'];
  655. if ($export_data) {
  656. $export_total = $rst['total'];
  657. $export_rate = 0;
  658. if ($export_total>0) {
  659. $export_rate = 100;
  660. }
  661. $export_data[] = ['name'=>'合计','number'=>count($export_data)+1,'job_amount'=>$export_total,'rate'=>$export_rate];
  662. }
  663. //导出文件
  664. $export = new TradeExport("总体分析 - ".$date_aprams['start_year']."年".$date_aprams['start_month']."月到".$date_aprams['end_year']."年".$date_aprams['end_month']."月按行业分组的需求人数");
  665. $c = new Collection($export_data);
  666. $export->setCustomerData($c)->export();
  667. } else {
  668. return view('statistics.app.demand.trade', $return_data);
  669. }
  670. }
  671. //按用人单位性质、经济类型分组
  672. public function companyGroup(Request $request)
  673. {
  674. $subsite_id = session('caiqing_susbite_id');
  675. if ($subsite_id === null) {
  676. $subsite_id = -1;
  677. }
  678. //时间过滤
  679. $date_aprams = $this->getDateParams($request->all());
  680. $start_time = date('Y-m-d H:i:s', strtotime($date_aprams['start_year'].'-'.$date_aprams['start_month']));
  681. $EndDate = date('Y-m-d H:i:s', strtotime($date_aprams['end_year'].'-'.$date_aprams['end_month']));
  682. $end_time = date('Y-m-d H:i:s', strtotime("$EndDate +1 month")-1);
  683. $rst = $this->jobsService->getEconomicAmount($start_time, $end_time, $subsite_id);
  684. $return_data = [
  685. 'date_aprams' => $date_aprams,
  686. 'action_name' => app('request')->route()->getName(),
  687. 'chart_data' => $rst['chart_data'],
  688. 'table_data' => $rst['table_data'],
  689. 'nature_total' => $rst['nature_total'],
  690. 'domestic_data' => $rst['domestic_data'],
  691. ];
  692. if ($request->input('isExcel')==1) {
  693. //导出文件
  694. $export = new CompanyTypeExport("总体分析 - ".$date_aprams['start_year']."年".$date_aprams['start_month']."月到".$date_aprams['end_year']."年".$date_aprams['end_month']."月按经济类型分组的需求人数");
  695. $c = new Collection($rst['table_data']);
  696. $export->setCustomerData($c)->export();
  697. } else {
  698. return view('statistics.app.demand.economic', $return_data);
  699. }
  700. }
  701. //按职业分组
  702. public function jobTypeGroup(Request $request)
  703. {
  704. $subsite_id = session('caiqing_susbite_id');
  705. if ($subsite_id === null) {
  706. $subsite_id = -1;
  707. }
  708. //时间过滤
  709. $date_aprams = $this->getDateParams($request->all());
  710. $start_time = date('Y-m-d H:i:s', strtotime($date_aprams['start_year'].'-'.$date_aprams['start_month']));
  711. $EndDate = date('Y-m-d H:i:s', strtotime($date_aprams['end_year'].'-'.$date_aprams['end_month']));
  712. $end_time = date('Y-m-d H:i:s', strtotime("$EndDate +1 month")-1);
  713. $job_num1 = $this->jobsService->getJobTypeAmount($start_time, $end_time, [20], $subsite_id); //单位负责人
  714. $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); //专业技术人员
  715. $job_num3 = $this->jobsService->getJobTypeAmount($start_time, $end_time, [18,23,25], $subsite_id); //办事人员和有关人员
  716. $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); //商业和服务业人员
  717. $job_num5 = $this->jobsService->getJobTypeAmount($start_time, $end_time, [51], $subsite_id); //农林牧渔水利生产人员
  718. $job_num6 = $this->jobsService->getJobTypeAmount($start_time, $end_time, [19,30,34], $subsite_id); //生产运输设备操作工
  719. $job_num7 = $this->jobsService->getJobTypeAmount($start_time, $end_time, [0,52], $subsite_id); //其他
  720. $job_total = (int)$job_num1 + (int)$job_num2 + (int)$job_num3 + (int)$job_num4 + (int)$job_num5 + (int)$job_num6 + (int)$job_num7;
  721. $resume_num1 = $this->getResumeTypeAmount($start_time, $end_time, [20], $subsite_id); //单位负责人
  722. $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); //专业技术人员
  723. $resume_num3 = $this->getResumeTypeAmount($start_time, $end_time, [18,23,25], $subsite_id); //办事人员和有关人员
  724. $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); //商业和服务业人员
  725. $resume_num5 = $this->getResumeTypeAmount($start_time, $end_time, [51], $subsite_id); ///农林牧渔水利生产人员
  726. $resume_num6 = $this->getResumeTypeAmount($start_time, $end_time, [19,30,34], $subsite_id); //生产运输设备操作工
  727. $resume_num7 = $this->getResumeTypeAmount($start_time, $end_time, [0,52], $subsite_id); //其他
  728. $resume_total = (int)$resume_num1 + (int)$resume_num2 + (int)$resume_num3 + (int)$resume_num4 + (int)$resume_num5 + (int)$resume_num6 + (int)$resume_num7;
  729. //处理数据
  730. $data = [
  731. ['name'=>'单位负责人', 'job_amount'=>$job_num1, 'resume_num'=>$resume_num1, 'multiple'=>$resume_num1>0?sprintf("%.2f", (int)$job_num1/(int)$resume_num1):'0'],
  732. ['name'=>'专业技术人员', 'job_amount'=>$job_num2, 'resume_num'=>$resume_num2, 'multiple'=>$resume_num2>0?sprintf("%.2f", (int)$job_num2/(int)$resume_num2):'0'],
  733. ['name'=>'办事人员和有关人员', 'job_amount'=>$job_num3, 'resume_num'=>$resume_num3, 'multiple'=>$resume_num3>0?sprintf("%.2f", (int)$job_num3/(int)$resume_num3):'0'],
  734. ['name'=>'商业和服务业人员', 'job_amount'=>$job_num4, 'resume_num'=>$resume_num4, 'multiple'=>$resume_num4>0?sprintf("%.2f", (int)$job_num4/(int)$resume_num4):'0'],
  735. ['name'=>'农林牧渔水利生产人员','job_amount'=>$job_num5, 'resume_num'=>$resume_num5, 'multiple'=>$resume_num5>0?sprintf("%.2f", (int)$job_num5/(int)$resume_num5):'0'],
  736. ['name'=>'生产运输设备操作工', 'job_amount'=>$job_num6, 'resume_num'=>$resume_num6, 'multiple'=>$resume_num6>0?sprintf("%.2f", (int)$job_num6/(int)$resume_num6):'0'],
  737. ['name'=>'其他', 'job_amount'=>$job_num7, 'resume_num'=>$resume_num7, 'multiple'=>$resume_num7>0?sprintf("%.2f", (int)$job_num7/(int)$resume_num7):'0'],
  738. ];
  739. $return_data = [
  740. 'date_aprams' => $date_aprams,
  741. 'action_name' => app('request')->route()->getName(),
  742. 'job_amount' => $job_total,
  743. 'resume_total' => $resume_total,
  744. 'data' => $data
  745. ];
  746. if ($request->input('isExcel')==1) {
  747. if ($data) {
  748. foreach ($data as $k => $v) {
  749. $job_rate = '0';
  750. if ($job_total !=0) {
  751. $job_rate = sprintf("%.4f", $v['job_amount']>0?((int)$v['job_amount']/(int)$job_total):'0')*100;
  752. }
  753. $data[$k]['job_rate'] = $job_rate;
  754. $resume_rate = '0';
  755. if ($resume_total !=0) {
  756. $resume_rate = sprintf("%.4f", $v['resume_num']>0?((int)$v['resume_num']/(int)$resume_total):'0')*100;
  757. }
  758. $data[$k]['resume_rate'] = $resume_rate;
  759. }
  760. //添加合计信息
  761. $all_multiple = 0;
  762. if ($resume_total !=0) {
  763. $all_multiple = sprintf("%.2f", $resume_total>0?((int)$job_total/(int)$resume_total):'0');
  764. }
  765. $all_job_rate = '0';
  766. if ($job_total>0) {
  767. $all_job_rate = '100';
  768. }
  769. $all_resume_rate = '0';
  770. if ($resume_total>0) {
  771. $all_resume_rate = '100';
  772. }
  773. $data[] = [
  774. 'name' => '合计',
  775. 'job_amount' => $job_total,
  776. 'resume_num' => $resume_total,
  777. 'job_rate' => $all_job_rate,
  778. 'resume_rate'=> $all_resume_rate,
  779. 'multiple' => $all_multiple
  780. ];
  781. }
  782. //导出文件
  783. $export = new TypeExport("总体分析 - ".$date_aprams['start_year']."年".$date_aprams['start_month']."月到".$date_aprams['end_year']."年".$date_aprams['end_month']."月按职业分组的供求人数");
  784. $c = new Collection($data);
  785. $export->setCustomerData($c)->export();
  786. } else {
  787. return view('statistics.app.demand.job_type', $return_data);
  788. }
  789. }
  790. public function getResumeTypeAmount($start_time, $end_time, $types, $subsite_id)
  791. {
  792. $resume_where = [
  793. ['created_at', '<=', $end_time],
  794. ['created_at', '>=', $start_time],
  795. ];
  796. if (config('aix.personal_set.per_set.show_set.resume_display')=='1') {
  797. $resume_where[] = array('audit','=','2');
  798. } else {
  799. $resume_where[] = array('audit','<>','0');
  800. }
  801. $resume_where[] = ['intention_jobs_id','in',$types];
  802. if ($subsite_id != '-1') {
  803. $resume_where[] = array('subsite_id','=',$subsite_id);
  804. }
  805. $list = $this->searchService->search('Resume', $resume_where, ['id'=>'asc'], '');
  806. return $list->total();
  807. }
  808. public function getEducationJobNums($start_time, $end_time, $subsite_id)
  809. {
  810. $where = $this->getJobWhere($subsite_id, $start_time, $end_time);
  811. $job_where = $where['job_where'];
  812. $company_where = $where['company_where'];
  813. $edu_fields = 'sum(amount) as num, education';
  814. $edu_group = 'education';
  815. $edu_order = 'education asc';
  816. $edu_rst = $this->jobsService->getJobNumsByGroup($job_where, $company_where, $edu_fields, $edu_group, $edu_order);
  817. $job_data = [];
  818. if ($edu_rst) {
  819. foreach ($edu_rst as $k => $v) {
  820. $job_data[$v['education']] = $v['num'];
  821. }
  822. }
  823. return $job_data;
  824. }
  825. public function getEducationResumeNums($start_time, $end_time, $subsite_id)
  826. {
  827. $member_where = [
  828. ['m.utype','=',2],
  829. ['r.created_at','>=',$start_time],
  830. ['r.created_at','<=',$end_time]
  831. ];
  832. if ($subsite_id !='-1') {
  833. $member_where[] = ['m.subsite_id','=',$subsite_id];
  834. }
  835. if (config('aix.personal_set.per_set.show_set.resume_display')=='1') {
  836. $member_where[] = array('r.audit','=','2');
  837. } else {
  838. $member_where[] = array('r.audit','<>','0');
  839. }
  840. $edu_fields = 'count(r.id) as num, mi.education,mi.education_cn';
  841. $edu_group = 'mi.education';
  842. $where_str = 'm.deleted_at IS NULL AND mi.deleted_at IS NULL AND r.deleted_at IS NULL';
  843. $resume_rst = $this->memberService->getJobSeekersByGroup($member_where, $where_str, $edu_fields, $edu_group);
  844. $resume_data = $resume_rst->pluck('num', 'education')->toArray();
  845. return $resume_data;
  846. }
  847. //按文化程度分组的供求人数
  848. public function educationGroup(Request $request)
  849. {
  850. $subsite_id = session('caiqing_susbite_id');
  851. if ($subsite_id === null) {
  852. $subsite_id = -1;
  853. }
  854. //时间过滤
  855. $date_aprams = $this->getDateParams($request->all());
  856. $start_time = date('Y-m-d H:i:s', strtotime($date_aprams['start_year'].'-'.$date_aprams['start_month']));
  857. $EndDate = date('Y-m-d H:i:s', strtotime($date_aprams['end_year'].'-'.$date_aprams['end_month']));
  858. $end_time = date('Y-m-d H:i:s', strtotime("$EndDate +1 month")-1);
  859. $date_params = $this->getCompareDate($request->all());
  860. $compare_start_date = $date_params['start_date_arr']?implode(' - ', $date_params['start_date_arr']):'';
  861. $compare_end_date = $date_params['end_date_arr']?implode(' - ', $date_params['end_date_arr']):'';
  862. if ($date_params['end_date_arr']) {
  863. $start_time = date('Y-m-d H:i:s', strtotime($date_params['end_date_arr'][0]));
  864. $end_time = date('Y-m-d H:i:s', strtotime($date_params['end_date_arr'][1]." +1 day")-1);
  865. } else {
  866. $start_time = date('Y-m-d H:i:s', strtotime($date_params['start_date_arr'][0]));
  867. $end_time = date('Y-m-d H:i:s', strtotime($date_params['start_date_arr'][1]." +1 day")-1);
  868. }
  869. //过滤时间不等,需要显示对比数据
  870. $compare_flag = false;
  871. if (($date_params['end_date_arr'] != $date_params['start_date_arr']) && $date_params['end_date_arr'] && $date_params['start_date_arr']) {
  872. $compare_flag = true;
  873. }
  874. //获取文化程度数据 + 无要求
  875. $cates = $this->companyService->getCategories(['AIX_education'=>100]);
  876. $edu_cates = [];
  877. if (array_has($cates, 'AIX_education')) {
  878. $edu_cates = $cates['AIX_education'];
  879. $edu_cates['0'] = ['id'=>0, 'demand'=>'无要求'];
  880. }
  881. //获取需求信息
  882. $job_data = $this->getEducationJobNums($start_time, $end_time, $subsite_id);
  883. //获取求职人数
  884. $resume_data = $this->getEducationResumeNums($start_time, $end_time, $subsite_id);
  885. $compare_job_data = array();
  886. $compare_resume_data = array();
  887. if ($compare_flag) {
  888. $c_stime = date('Y-m-d H:i:s', strtotime($date_params['start_date_arr'][0]));
  889. $c_etime = date('Y-m-d H:i:s', strtotime($date_params['start_date_arr'][1]." +1 day")-1);
  890. $compare_job_data = $this->getEducationJobNums($c_stime, $c_etime, $subsite_id);
  891. $compare_resume_data = $this->getEducationResumeNums($c_stime, $c_etime, $subsite_id);
  892. }
  893. $resume_total = array_sum($resume_data);
  894. $job_total = array_sum($job_data);
  895. $c_job_total = array_sum($compare_job_data);
  896. $c_resume_total = array_sum($compare_resume_data);
  897. $c_table_data = [];
  898. $table_data = [];
  899. if ($edu_cates) {
  900. foreach ($edu_cates as $k => $v) {
  901. $job_num = array_has($job_data, $k)?$job_data[$k]:0;
  902. $resume_num = array_has($resume_data, $k)?$resume_data[$k]:0;
  903. if ($resume_num==0 || $job_num==0) {
  904. $rate = 0;
  905. } else {
  906. $rate = $resume_num>0?sprintf("%.2f", (int)$job_num/(int)$resume_num):'0';
  907. }
  908. $job_rate = 0;
  909. if ($job_total) {
  910. $job_rate = sprintf("%.4f", (int)$job_num/(int)$job_total)*100;
  911. }
  912. $resume_rate = 0;
  913. if ($resume_total) {
  914. $resume_rate = sprintf("%.4f", (int)$resume_num/(int)$resume_total)*100;
  915. }
  916. $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];
  917. //对比数据
  918. $c_job_num = array_has($compare_job_data, $k)?$compare_job_data[$k]:0;
  919. $c_resume_num = array_has($compare_resume_data, $k)?$compare_resume_data[$k]:0;
  920. if ($c_job_num==0 || $c_resume_num==0) {
  921. $c_rate = 0;
  922. } else {
  923. $c_rate = $c_resume_num>0?sprintf("%.2f", (int)$c_job_num/(int)$c_resume_num):'0';
  924. }
  925. $c_job_rate = 0;
  926. if ($c_job_total) {
  927. $c_job_rate = sprintf("%.4f", (int)$c_job_num/(int)$c_job_total)*100;
  928. }
  929. $c_resume_rate = 0;
  930. if ($c_resume_total) {
  931. $c_resume_rate = sprintf("%.4f", (int)$c_resume_num/(int)$c_resume_total)*100;
  932. }
  933. $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];
  934. }
  935. }
  936. $return_data = [
  937. 'date_aprams' => $date_aprams,
  938. 'date_params' => $date_params,
  939. 'compare_flag' => $compare_flag,
  940. 'compare_start_date' => $compare_start_date,
  941. 'compare_end_date' => $compare_end_date,
  942. 'compare_table_data' => $c_table_data,
  943. 'compare_job_total' => $c_job_total,
  944. 'compare_resume_total' => $c_resume_total,
  945. 'compare_flag' => $compare_flag,
  946. 'action_name' => app('request')->route()->getName(),
  947. 'table_data' => $table_data,
  948. 'resume_total' => $resume_total,
  949. 'job_total' => $job_total
  950. ];
  951. if ($request->input('isExcel')==1) {
  952. if ($table_data) {
  953. foreach ($table_data as $k => $v) {
  954. $job_rate = '0';
  955. if ($job_total !=0) {
  956. $job_rate = sprintf("%.4f", $v['job_amount']>0?((int)$v['job_amount']/(int)$job_total):'0')*100;
  957. }
  958. $table_data[$k]['job_rate'] = $job_rate;
  959. $resume_rate = '0';
  960. if ($resume_total !=0) {
  961. $resume_rate = sprintf("%.4f", $v['resume_num']>0?((int)$v['resume_num']/(int)$resume_total):'0')*100;
  962. }
  963. $table_data[$k]['resume_rate'] = $resume_rate;
  964. }
  965. //添加合计信息
  966. $all_multiple = 0;
  967. if ($resume_total !=0) {
  968. $all_multiple = sprintf("%.2f", $resume_total>0?((int)$job_total/(int)$resume_total):'0');
  969. }
  970. $all_job_rate = '0';
  971. if ($job_total>0) {
  972. $all_job_rate = '100';
  973. }
  974. $all_resume_rate = '0';
  975. if ($resume_total>0) {
  976. $all_resume_rate = '100';
  977. }
  978. $table_data[] = [
  979. 'name' => '合计',
  980. 'job_amount' => $job_total,
  981. 'resume_num' => $resume_total,
  982. 'job_rate' => $all_job_rate,
  983. 'resume_rate'=> $all_resume_rate,
  984. 'multiple' => $all_multiple
  985. ];
  986. }
  987. //导出文件
  988. $export = new EducationExport("总体分析 - ".$date_aprams['start_year']."年".$date_aprams['start_month']."月到".$date_aprams['end_year']."年".$date_aprams['end_month']."月按文化程度分组的需求人数");
  989. $c = new Collection($table_data);
  990. $export->setCustomerData($c)->export();
  991. } else {
  992. return view('statistics.app.demand.education', $return_data);
  993. }
  994. }
  995. //按人员类别分组
  996. public function personTypeGroup(Request $request)
  997. {
  998. $subsite_id = session('caiqing_susbite_id');
  999. if ($subsite_id === null) {
  1000. $subsite_id = -1;
  1001. }
  1002. //时间过滤
  1003. $date_aprams = $this->getDateParams($request->all());
  1004. $start_time = date('Y-m-d H:i:s', strtotime($date_aprams['start_year'].'-'.$date_aprams['start_month']));
  1005. $endDate = date('Y-m-d H:i:s', strtotime($date_aprams['end_year'].'-'.$date_aprams['end_month']));
  1006. $end_time = date('Y-m-d H:i:s', strtotime("$endDate +1 month")-1);
  1007. //按就业状态分组获取所有求职信息 AIX_current
  1008. $resume_where = [
  1009. ['created_at', '<=', $end_time],
  1010. ['created_at', '>=', $start_time],
  1011. ];
  1012. if (config('aix.personal_set.per_set.show_set.resume_display')=='1') {
  1013. $resume_where[] = array('audit','=','2');
  1014. } else {
  1015. $resume_where[] = array('audit','<>','0');
  1016. }
  1017. $member_where = array(
  1018. ['utype','=',2],
  1019. ['status','=',1]
  1020. );
  1021. if ($subsite_id != -1) {
  1022. $member_where[] = ['subsite_id','=',$subsite_id];
  1023. }
  1024. $resume_group = "current";
  1025. $resume_fields = "count(id) as num,current,current_cn";
  1026. $resume_order = 'current desc';
  1027. $resume_rst = $this->resumeService->getResumeNumsGroup($resume_where, $member_where, $resume_fields, $resume_group, $resume_order);
  1028. $chart_data = [
  1029. ['name'=>'新成长失业青年','value'=>0],
  1030. ['name'=>'就业专业人员','value'=>0],
  1031. ['name'=>'在业人员','value'=>0],
  1032. ];
  1033. $resume_num1 = 0;
  1034. $resume_num2 = 0;
  1035. $resume_num3 = 0;
  1036. $resume_total = 0;
  1037. if ($resume_rst->isNotEmpty()) {
  1038. foreach ($resume_rst->toArray() as $k => $v) {
  1039. if ($v['current_cn'] == '应届毕业生') { //获取新成长失业青年求职数量(应届毕业生 245)
  1040. $resume_num1 = (int)$resume_num1 + (int)$v['num'];
  1041. } elseif ($v['current_cn'] == '我目前已离职,可快速到岗') { //获取就业专业人员求职数量(已离职可快速到岗 241)
  1042. $resume_num2 = (int)$resume_num2 + (int)$v['num'];
  1043. } else { //获取在业人员求职数量 (在职、考虑、无跳槽 242,243,244)
  1044. $resume_num3 = (int)$resume_num3 + (int)$v['num'];
  1045. }
  1046. $resume_total = (int)$resume_total + (int)$v['num'];
  1047. }
  1048. $chart_data = [
  1049. ['name'=>'新成长失业青年','value'=>$resume_num1],
  1050. ['name'=>'就业专业人员','value'=>$resume_num2],
  1051. ['name'=>'在业人员','value'=>$resume_num3],
  1052. ];
  1053. }
  1054. $return_data = [
  1055. 'date_aprams' => $date_aprams,
  1056. 'action_name' => app('request')->route()->getName(),
  1057. 'chart_data' => $chart_data,
  1058. 'resume_total' => $resume_total
  1059. ];
  1060. if ($request->input('isExcel')==1) {
  1061. if ($chart_data) {
  1062. foreach ($chart_data as $k => $v) {
  1063. $rate = 0;
  1064. if ($resume_total>0) {
  1065. $rate = sprintf("%.4f", $v['value']>0?((int)$v['value']/(int)$resume_total):'0')*100;
  1066. }
  1067. $chart_data[$k]['rate'] = $rate;
  1068. }
  1069. $all_rate = 0;
  1070. if ($resume_total>0) {
  1071. $all_rate = 100;
  1072. }
  1073. $chart_data[] = array('name'=>'合计','value'=>$resume_total,'rate'=>$all_rate);
  1074. }
  1075. $export = new PersonTypeExport("总体分析 - ".$date_aprams['start_year']."年".$date_aprams['start_month']."月到".$date_aprams['end_year']."年".$date_aprams['end_month']."月按人员类别分组的供求人数");
  1076. $c = new Collection($chart_data);
  1077. $export->setCustomerData($c)->export();
  1078. } else {
  1079. return view('statistics.app.demand.person_type', $return_data);
  1080. }
  1081. }
  1082. //按年龄分组
  1083. /**
  1084. * 年龄分组的统计口径为:
  1085. * 在后台自动获取年龄段,每个年龄段招聘人数的计算方式为:取职位中填写的年龄段和后台年龄段对比,查看跨越几个年龄段,平均分到各个年龄段,如果有余数加到最小的年龄段内。
  1086. * */
  1087. public function ageGroup(Request $request)
  1088. {
  1089. $subsite_id = session('caiqing_susbite_id');
  1090. if ($subsite_id === null) {
  1091. $subsite_id = -1;
  1092. }
  1093. //时间过滤
  1094. $date_aprams = $this->getDateParams($request->all());
  1095. $start_time = date('Y-m-d H:i:s', strtotime($date_aprams['start_year'].'-'.$date_aprams['start_month']));
  1096. $endDate = date('Y-m-d H:i:s', strtotime($date_aprams['end_year'].'-'.$date_aprams['end_month']));
  1097. $end_time = date('Y-m-d H:i:s', strtotime("$endDate +1 month")-1);
  1098. //获取后台年龄分类信息 categories AIX_age
  1099. $cates = $this->categoryService->getCategories(['AIX_age'=>100]);
  1100. if (array_has($cates, 'AIX_age')) {
  1101. $age_cates = $cates['AIX_age'];
  1102. } else {
  1103. $age_cates = [];
  1104. }
  1105. $age_arr = [];
  1106. $age_val_arr = [];
  1107. if ($age_cates) {
  1108. foreach ($age_cates as $k => $v) {
  1109. $age_arr[] = $v['demand'];
  1110. if (preg_match_all('(\d+)', $v['demand'], $reg)) {
  1111. $reg = $reg[0];
  1112. if (count($reg)>1) {
  1113. $min_age = $reg[0];
  1114. $max_age = $reg[1];
  1115. } else {
  1116. $min_age = $reg[0];
  1117. $max_age = '';
  1118. }
  1119. $age_val_arr[] = array('min_age'=>$min_age, 'max_age'=>$max_age);
  1120. }
  1121. }
  1122. }
  1123. //获取职位查询条件
  1124. $where_arr = $this->getJobWhere($subsite_id, $start_time, $end_time);
  1125. //获取不同年龄段的招聘人数
  1126. $job_amounts = $this->jobsService->getJobAmountByAge($where_arr, $age_val_arr, $age_arr);
  1127. //获取求职人数(计算简历数量)
  1128. $resume_nums = $this->resumeService->getResumeNumsByAgeGroup($subsite_id, $start_time, $end_time, $age_val_arr, $age_arr);
  1129. $job_total = array_sum($job_amounts);
  1130. $resume_total = array_sum($resume_nums);
  1131. $table_data = [];
  1132. foreach ($age_arr as $k => $v) {
  1133. $job_num = array_has($job_amounts, $v)?$job_amounts[$v]:0;
  1134. $resume_num = array_has($resume_nums, $v)?$resume_nums[$v]:0;
  1135. $job_rate = 0;
  1136. if ($job_total) {
  1137. $job_rate = sprintf("%.4f", (int)$job_num/(int)$job_total)*100;
  1138. }
  1139. $resume_rate = 0;
  1140. if ($resume_total) {
  1141. $resume_rate = sprintf("%.4f", (int)$resume_num/(int)$resume_total)*100;
  1142. }
  1143. $multiple = 0;
  1144. if ($resume_num) {
  1145. $multiple = sprintf("%.2f", (int)$job_num/(int)$resume_num);
  1146. }
  1147. $table_data[] = ['name'=>$v, 'job_amount'=>$job_num,'job_rate'=>$job_rate, 'resume_num'=>$resume_num,'resume_rate'=>$resume_rate, 'multiple'=>$multiple];
  1148. }
  1149. $chart_data = $table_data;
  1150. //添加合计信息
  1151. $total_job_rate = 0;
  1152. if ($job_total) {
  1153. $total_job_rate = 100;
  1154. }
  1155. $total_resume_rate = 0;
  1156. $total_multiple = 0;
  1157. if ($resume_total) {
  1158. $total_resume_rate = 100;
  1159. $total_multiple = sprintf("%.2f", (int)$job_total/(int)$resume_total);
  1160. }
  1161. $table_data[] = ['name'=>'合计', 'job_amount'=>$job_total, 'job_rate'=>$total_job_rate, 'resume_num'=>$resume_total, 'resume_rate'=>$total_resume_rate, 'multiple'=>$total_multiple];
  1162. $return_data = [
  1163. 'date_aprams' => $date_aprams,
  1164. 'action_name' => app('request')->route()->getName(),
  1165. 'table_data' => $table_data,
  1166. 'chart_data' => $chart_data
  1167. ];
  1168. if ($request->input('isExcel')==1) {
  1169. $export = new AgeExport("总体分析 - ".$date_aprams['start_year']."年".$date_aprams['start_month']."月到".$date_aprams['end_year']."年".$date_aprams['end_month']."月按年龄分组的供求人数");
  1170. $c = new Collection($table_data);
  1171. $export->setCustomerData($c)->export();
  1172. } else {
  1173. return view('statistics.app.demand.age', $return_data);
  1174. }
  1175. }
  1176. //按性别分组
  1177. public function sexGroup(Request $request)
  1178. {
  1179. $subsite_id = session('caiqing_susbite_id');
  1180. if ($subsite_id === null) {
  1181. $subsite_id = -1;
  1182. }
  1183. //时间过滤
  1184. $date_params = $this->getCompareDate($request->all());
  1185. $compare_start_date = $date_params['start_date_arr']?implode(' - ', $date_params['start_date_arr']):'';
  1186. $compare_end_date = $date_params['end_date_arr']?implode(' - ', $date_params['end_date_arr']):'';
  1187. if ($date_params['end_date_arr']) {
  1188. $start_time = date('Y-m-d H:i:s', strtotime($date_params['end_date_arr'][0]));
  1189. $end_time = date('Y-m-d H:i:s', strtotime($date_params['end_date_arr'][1]." +1 day")-1);
  1190. } else {
  1191. $start_time = date('Y-m-d H:i:s', strtotime($date_params['start_date_arr'][0]));
  1192. $end_time = date('Y-m-d H:i:s', strtotime($date_params['start_date_arr'][1]." +1 day")-1);
  1193. }
  1194. //过滤时间不等,需要显示对比数据
  1195. $compare_flag = false;
  1196. if (($date_params['end_date_arr'] != $date_params['start_date_arr']) && $date_params['end_date_arr'] && $date_params['start_date_arr']) {
  1197. $compare_flag = true;
  1198. }
  1199. //获取简历数据 - 求职信息
  1200. $resume_rst = $this->resumeService->getResumeBySexGroup($subsite_id, $start_time, $end_time);
  1201. $resume_data = $this->dealSexData($resume_rst, 1);
  1202. $resume_total = array_sum($resume_data);
  1203. $c_resume_data = [];
  1204. $c_resume_total = 0;
  1205. $c_job_data = [];
  1206. $c_job_total = 0;
  1207. //职位数量分组
  1208. $job_rst = $this->getJobNumsBySexGroup($subsite_id, $start_time, $end_time);
  1209. $job_data = $this->dealSexData($job_rst, 2);
  1210. $job_total = array_sum($job_data);
  1211. if ($compare_flag) {
  1212. $c_stime = date('Y-m-d H:i:s', strtotime($date_params['start_date_arr'][0]));
  1213. $c_etime = date('Y-m-d H:i:s', strtotime($date_params['start_date_arr'][1]." +1 day")-1);
  1214. $c_resume_rst = $this->resumeService->getResumeBySexGroup($subsite_id, $c_stime, $c_etime);
  1215. $c_resume_data = $this->dealSexData($c_resume_rst);
  1216. $c_resume_total = array_sum($c_resume_data);
  1217. $c_job_rst = $this->getJobNumsBySexGroup($subsite_id, $c_stime, $c_etime);
  1218. $c_job_data = $this->dealSexData($c_job_rst, 2);
  1219. $c_job_total = array_sum($c_job_data);
  1220. }
  1221. //处理数据
  1222. $sex_cates = array('0'=>'不限','1'=>'男','2'=>'女');
  1223. $table_data = array();
  1224. $c_table_data = array();
  1225. foreach ($sex_cates as $k => $v) {
  1226. $job_amount = array_has($job_data, $k)?$job_data[$k]:0;
  1227. $resume_num = array_has($resume_data, $k)?$resume_data[$k]:0;
  1228. $job_rate = 0;
  1229. if ($job_total>0) {
  1230. $job_rate = sprintf("%.4f", (int)$job_amount/(int)$job_total)*100;
  1231. }
  1232. $resume_rate = 0;
  1233. if ($resume_total>0) {
  1234. $resume_rate = sprintf("%.4f", (int)$resume_num/(int)$resume_total)*100;
  1235. }
  1236. if ($resume_num==0 || $job_amount==0) {
  1237. $multiple = 0;
  1238. } else {
  1239. $multiple = $resume_num>0?sprintf("%.2f", (int)$job_amount/(int)$resume_num):'0';
  1240. }
  1241. $table_data[] = array(
  1242. 'name'=>$v,
  1243. 'job_amount'=>$job_amount,
  1244. 'job_rate'=>$job_rate,
  1245. 'resume_num'=>$resume_num,
  1246. 'resume_rate'=>$resume_rate,
  1247. 'multiple'=>$multiple
  1248. );
  1249. //对比数据
  1250. $c_job_amount = array_has($c_job_data, $k)?$c_job_data[$k]:0;
  1251. $c_resume_num = array_has($c_resume_data, $k)?$c_resume_data[$k]:0;
  1252. $c_job_rate = 0;
  1253. if ($c_job_total>0) {
  1254. $c_job_rate = sprintf("%.4f", (int)$c_job_amount/(int)$c_job_total)*100;
  1255. }
  1256. $c_resume_rate = 0;
  1257. if ($c_resume_total>0) {
  1258. $c_resume_rate = sprintf("%.4f", (int)$c_resume_num/(int)$c_resume_total)*100;
  1259. }
  1260. if ($c_resume_num==0 || $c_job_amount==0) {
  1261. $c_multiple = 0;
  1262. } else {
  1263. $c_multiple = $c_resume_num>0?sprintf("%.2f", (int)$c_job_amount/(int)$c_resume_num):'0';
  1264. }
  1265. $c_table_data[] = array(
  1266. 'name'=>$v,
  1267. 'job_amount'=>$c_job_amount,
  1268. 'job_rate'=>$c_job_rate,
  1269. 'resume_num'=>$c_resume_num,
  1270. 'resume_rate'=>$c_resume_rate,
  1271. 'multiple'=>$c_multiple
  1272. );
  1273. }
  1274. //合计信息
  1275. $all_job_rate = 0;
  1276. if ($job_total>0) {
  1277. $all_job_rate = sprintf("%.4f", (int)$job_total/(int)$job_total)*100;
  1278. }
  1279. $all_resume_rate = 0;
  1280. if ($resume_total>0) {
  1281. $all_resume_rate = sprintf("%.4f", (int)$resume_total/(int)$resume_total)*100;
  1282. }
  1283. $all_multiple = 0;
  1284. if ($resume_total>0) {
  1285. $all_multiple = sprintf("%.2f", (int)$job_total/(int)$resume_total);
  1286. }
  1287. $table_data[] = array(
  1288. 'name'=>'合计',
  1289. 'job_amount'=>$job_total,
  1290. 'job_rate'=>$all_job_rate,
  1291. 'resume_num'=>$resume_total,
  1292. 'resume_rate'=>$all_resume_rate,
  1293. 'multiple'=>$all_multiple
  1294. );
  1295. $call_job_rate = 0;
  1296. if ($c_job_total>0) {
  1297. $call_job_rate = sprintf("%.4f", (int)$c_job_total/(int)$c_job_total)*100;
  1298. }
  1299. $call_resume_rate = 0;
  1300. if ($c_resume_total>0) {
  1301. $call_resume_rate = sprintf("%.4f", (int)$c_resume_total/(int)$c_resume_total)*100;
  1302. }
  1303. $call_multiple = 0;
  1304. if ($c_resume_total>0) {
  1305. $call_multiple = sprintf("%.2f", (int)$c_job_total/(int)$c_resume_total);
  1306. }
  1307. $c_table_data[] = array(
  1308. 'name'=>'合计',
  1309. 'job_amount'=>$c_job_total,
  1310. 'job_rate'=>$call_job_rate,
  1311. 'resume_num'=>$c_resume_total,
  1312. 'resume_rate'=>$call_resume_rate,
  1313. 'multiple'=>$call_multiple
  1314. );
  1315. $return_data = [
  1316. 'date_params' => $date_params,
  1317. 'compare_start_date' => $compare_start_date,
  1318. 'compare_end_date' => $compare_end_date,
  1319. 'action_name' => app('request')->route()->getName(),
  1320. 'compare_flag' => $compare_flag,
  1321. 'table_data' => $table_data,
  1322. 'compare_table_data' => $c_table_data,
  1323. 'job_total' => $job_total,
  1324. 'compare_job_total' => $c_job_total,
  1325. 'resume_total' => $resume_total,
  1326. 'compare_resume_total' => $c_resume_total
  1327. ];
  1328. return view('statistics.app.demand.sex', $return_data);
  1329. }
  1330. public function getJobNumsBySexGroup($subsite_id, $start_time, $end_time)
  1331. {
  1332. $job_where = [
  1333. ['created_at','<=',$end_time],
  1334. ['created_at','>=',$start_time],
  1335. ['valid','=',1]
  1336. ];
  1337. if (config('aix.companyset.comset.show_set.jobs_display')==1) {
  1338. $job_where[] = array('audit','=',1);
  1339. } else {
  1340. $job_where[] = array('audit','<>',3);
  1341. }
  1342. $company_where = array(array('utype','=',1),array('audit','<>',3));
  1343. if ($subsite_id != -1) {
  1344. $company_where[] = ['subsite_id','=',$subsite_id];
  1345. }
  1346. $fields = 'sum(amount) as num,sex';
  1347. $group_by = 'sex';
  1348. return $this->jobsService->getJobNumsByGroup($job_where, $company_where, $fields, $group_by);
  1349. }
  1350. public function dealSexData($data, $type = 1)
  1351. {
  1352. $rst = array();
  1353. if ($type == 1) {
  1354. if (count($data)) {
  1355. foreach ($data as $k => $v) {
  1356. $rst[$v->sex] = $v->num;
  1357. }
  1358. }
  1359. } else {
  1360. if (count($data)) {
  1361. foreach ($data as $k => $v) {
  1362. $rst[$v['sex']] = $v['num'];
  1363. }
  1364. }
  1365. }
  1366. return $rst;
  1367. }
  1368. public function getJobWhere($subsite_id, $start_time, $end_time)
  1369. {
  1370. $job_where = [
  1371. ['created_at','<=',$end_time],
  1372. ['created_at','>=',$start_time],
  1373. ['valid','=',1],
  1374. //['display','=',1]
  1375. ];
  1376. if (config('aix.companyset.comset.show_set.jobs_display')==1) {
  1377. $job_where[] = array('audit','=',1);
  1378. } else {
  1379. $job_where[] = array('audit','<>',3);
  1380. }
  1381. //$company_where = ['utype'=>1,'user_status'=>1];
  1382. $company_where = [['utype','=',1],['audit','<>',3]];
  1383. if ($subsite_id != -1) {
  1384. $company_where[] = ['subsite_id','=',$subsite_id];
  1385. }
  1386. return ['job_where'=>$job_where, 'company_where'=>$company_where];
  1387. }
  1388. public function getJobfairs($subsite_id)
  1389. {
  1390. $j_where = array();
  1391. if ($subsite_id != -1) {
  1392. $j_where[] = ['subsite_id','=',$subsite_id];
  1393. }
  1394. $j_where[] = ['holddate_end','<=',time()];
  1395. $j_order = 'id desc';
  1396. $jobfair_rst = $this->jobfairService->getJobfairs($j_where, $j_order);
  1397. $jobfairs = array();
  1398. if ($jobfair_rst->isNotEmpty()) {
  1399. foreach ($jobfair_rst as $k => $v) {
  1400. $jobfairs[$v->id] = array('title'=>$v->title,'holddate_end'=>$v->holddate_end);
  1401. }
  1402. }
  1403. return $jobfairs;
  1404. }
  1405. }