CompanyController.php 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358
  1. <?php
  2. namespace App\Http\Controllers\Statistics;
  3. use App\Http\Controllers\Statistics\StatisticsBaseController;
  4. use Illuminate\Http\Request;
  5. use App\Services\Statistics\CompanyService;
  6. use App\Services\Statistics\JobsService;
  7. class CompanyController extends StatisticsBaseController
  8. {
  9. protected $companyService;
  10. protected $jobsService;
  11. /**
  12. * CompanyController constructor.
  13. */
  14. public function __construct(CompanyService $companyService, JobsService $jobsService)
  15. {
  16. $this->companyService = $companyService;
  17. $this->jobsService = $jobsService;
  18. }
  19. public function getCompanyDate($start_time, $end_time, $subsite_id)
  20. {
  21. //企业数量(过滤审核未通过的企业)
  22. $where = array(array('utype','=',1),array('audit','<>',3));
  23. if ($subsite_id !='-1') {
  24. $where[] = array('subsite_id','=',$subsite_id);
  25. }
  26. $all_company_num = $this->companyService->getCompanyNums($where);
  27. $map = $where;
  28. $map[] = array('created_at','>=',$start_time);
  29. $map[] = array('created_at','<=',$end_time);
  30. $current_company_num = $this->companyService->getCompanyNums($map);
  31. //职位数量(前台可以看的职位 - 过滤审核失败的企业)
  32. $job_where = array(
  33. array('valid','=','1'),
  34. //array('display','=',1)
  35. );
  36. if ($subsite_id != -1) {
  37. $job_where[] = array('subsite_id','=',$subsite_id);
  38. }
  39. if (config('aix.companyset.comset.show_set.jobs_display')==1) {
  40. $job_where[] = array('audit','=',1);
  41. } else {
  42. $job_where[] = array('audit','<>',3);
  43. }
  44. $job_map = $job_where;
  45. $job_map[] = array('created_at','>=',$start_time);
  46. $job_map[] = array('created_at','<=',$end_time);
  47. $all_jobs_num = $this->jobsService->getJobNum($job_where, $where);
  48. $current_jobs_num = $this->jobsService->getJobNum($job_map, $where);
  49. //招聘人数
  50. $all_job_amount = $this->jobsService->getJobNumsByGroup($job_where, $where, 'sum(amount) as job_amount', '');
  51. $current_job_amount = $this->jobsService->getJobNumsByGroup($job_map, $where, 'sum(amount) as job_amount', '');
  52. return array(
  53. 'all_company_num' => $all_company_num,
  54. 'current_company_num'=> $current_company_num,
  55. 'all_jobs_num' => $all_jobs_num,
  56. 'current_jobs_num' => $current_jobs_num,
  57. 'all_job_amount' => $all_job_amount[0]['job_amount']?$all_job_amount[0]['job_amount']:0,
  58. 'current_job_amount' => $current_job_amount[0]['job_amount']?$current_job_amount[0]['job_amount']:0,
  59. );
  60. }
  61. public function basicAnalysis(Request $request)
  62. {
  63. $subsite_id = session('caiqing_susbite_id');
  64. if ($subsite_id === null) {
  65. $subsite_id = -1;
  66. }
  67. //时间过滤
  68. $date_aprams = $this->getDateDetail($request->all());
  69. $start_time = date('Y-m-d H:i:s', strtotime($date_aprams['start_date']));
  70. $end_time = date('Y-m-d H:i:s', strtotime($date_aprams['end_date'].' +1 day')-1);
  71. $company_data = $this->getCompanyDate($start_time, $end_time, $subsite_id);
  72. //企业过滤条件 - 过滤审核失败的企业
  73. $where = [
  74. ['utype','=',1],
  75. //['user_status','=',1],
  76. ['audit','<>',3],
  77. ['created_at','>=',$start_time],
  78. ['created_at','<=',$end_time]
  79. ];
  80. if ($subsite_id !='-1') {
  81. $where[] = ['subsite_id','=',$subsite_id];
  82. }
  83. //分类信息(企业性质、企业规模)
  84. $cate_filter = ['AIX_company_type' => 100, 'AIX_scale'=>100, 'AIX_trade'=>100];
  85. $cates = $this->companyService->getCategories($cate_filter);
  86. //按公司性质统计企业数量
  87. $nature_fields = 'count(id) as num, nature';
  88. $nature_group = 'nature';
  89. $nature_rst = $this->companyService->getCompanyNumsGroup($where, $nature_fields, $nature_group);
  90. $nature_data = [];
  91. $nature_names = [];
  92. if ($nature_rst) {
  93. foreach ($nature_rst as $k => $v) {
  94. $nature_data[] = $v['num'];
  95. if ($v['nature'] == 0) {
  96. $nature_names[] = '没有填写';
  97. } else {
  98. if (array_has($cates['AIX_company_type'], $v['nature'])) {
  99. $nature_names[] = $cates['AIX_company_type'][$v['nature']]['demand'];
  100. } else {
  101. $nature_names[] = '';
  102. }
  103. }
  104. }
  105. }
  106. //按公司规模统计企业数量
  107. $scale_fields = 'count(id) as num, scale';
  108. $scale_group = 'scale';
  109. $scale_rst = $this->companyService->getCompanyNumsGroup($where, $scale_fields, $scale_group);
  110. $scale_data = [];
  111. $scale_names = [];
  112. if ($scale_rst) {
  113. foreach ($scale_rst as $k => $v) {
  114. $scale_data[] = $v['num'];
  115. if ($v['scale'] == 0) {
  116. $scale_names[] = '没有填写';
  117. } else {
  118. if (array_has($cates['AIX_scale'], $v['scale'])) {
  119. $scale_names[] = $cates['AIX_scale'][$v['scale']]['demand'];
  120. } else {
  121. $scale_names[] = '';
  122. }
  123. }
  124. }
  125. }
  126. //按行业分布统计企业数量
  127. $trade_fields = 'count(id) as num, trade';
  128. $trade_group = 'trade';
  129. $trade_rst = $this->companyService->getCompanyNumsGroup($where, $trade_fields, $trade_group);
  130. $trade_data = [];
  131. $trade_names = [];
  132. if ($trade_rst) {
  133. foreach ($trade_rst as $k => $v) {
  134. $trade_data[] = $v['num'];
  135. if ($v['trade'] == 0) {
  136. $trade_names[] = '没有填写';
  137. } else {
  138. if (array_has($cates['AIX_trade'], $v['trade'])) {
  139. $trade_names[] = $cates['AIX_trade'][$v['trade']]['demand'];
  140. } else {
  141. $trade_names[] = '';
  142. }
  143. }
  144. }
  145. }
  146. $return_data = [
  147. 'all_company_num'=>$company_data['all_company_num'],
  148. 'current_company_num'=>$company_data['current_company_num'],
  149. 'all_jobs_num'=>$company_data['all_jobs_num'],
  150. 'current_jobs_num'=>$company_data['current_jobs_num'],
  151. 'all_job_amount' => $company_data['all_job_amount'],
  152. 'current_job_amount' => $company_data['current_job_amount'],
  153. 'date_aprams' => $date_aprams,
  154. 'action_name' => app('request')->route()->getName(),
  155. 'nature_data' => $nature_data,
  156. 'nature_names' => $nature_names,
  157. 'scale_data' => $scale_data,
  158. 'scale_names' => $scale_names,
  159. 'trade_data' => $trade_data,
  160. 'trade_names' => $trade_names,
  161. ];
  162. return view('statistics.app.company.basic_analysis', $return_data);
  163. }
  164. public function jobAnalysis(Request $request)
  165. {
  166. $subsite_id = session('caiqing_susbite_id');
  167. if ($subsite_id === null) {
  168. $subsite_id = -1;
  169. }
  170. //时间过滤
  171. $date_aprams = $this->getDateDetail($request->all());
  172. $start_time = date('Y-m-d H:i:s', strtotime($date_aprams['start_date']));
  173. $end_time = date('Y-m-d H:i:s', strtotime($date_aprams['end_date'].' +1 day')-1);
  174. $company_data = $this->getCompanyDate($start_time, $end_time, $subsite_id);
  175. $cate_filter = ['AIX_trade' => 100,'AIX_experience' => 100, 'AIX_education'=>100];
  176. $cates = $this->companyService->getCategories($cate_filter);
  177. //职位过滤条件
  178. $job_where = array(
  179. array('valid','=','1'),
  180. //array('display','=',1),
  181. array('created_at','>=',$start_time),
  182. array('created_at','<=',$end_time)
  183. );
  184. $trade_where = array(
  185. array('j.valid','=','1'),
  186. //array('j.display','=',1),
  187. array('j.created_at','>=',$start_time),
  188. array('j.created_at','<=',$end_time)
  189. );
  190. if (config('aix.companyset.comset.show_set.jobs_display')==1) {
  191. $job_where[] = array('audit','=',1);
  192. $trade_where[] = array('j.audit','=',1);
  193. } else {
  194. $job_where[] = array('audit','<>',3);
  195. $trade_where[] = array('j.audit','<>',3);
  196. }
  197. $company_where = [['utype','=',1],['audit','<>',3]/*'user_status'=>1*/];
  198. if ($subsite_id != -1) {
  199. $job_where[] = ['subsite_id','=',$subsite_id];
  200. $trade_where[] = ['c.subsite_id','=',$subsite_id];
  201. $company_where[] = ['subsite_id','=',$subsite_id];
  202. }
  203. //行业需求(行业数量靠前的职位数量)
  204. $trade_where[] = ['c.utype','=',1];
  205. $trade_where[] = ['c.user_status','=',1];
  206. $trade_fields = 'count(j.id) as num, c.trade';
  207. $trade_group = 'c.trade';
  208. $trade_order = 'count(j.id) desc';
  209. $trade_rst = $this->jobsService->getJobNumByTradeGroup($trade_where, $trade_fields, $trade_group, $trade_order, '10');
  210. $trade_data = [];
  211. if ($trade_rst) {
  212. foreach ($trade_rst as $k => $v) {
  213. $trade_name_s = '';
  214. if ($v->trade == 0) {
  215. $trade_name_s = '没有填写';
  216. } else {
  217. if (array_has($cates['AIX_trade'], $v->trade)) {
  218. $trade_name_s = $cates['AIX_trade'][$v->trade]['demand'];
  219. } else {
  220. $trade_name_s = '';
  221. }
  222. }
  223. $trade_data[] = array(
  224. 'num'=> $v->num,
  225. 'trade'=> $v->trade,
  226. 'name'=> $trade_name_s,
  227. );
  228. }
  229. }
  230. //职位大类(数量靠前职位大类的薪资平均值)
  231. $topclass_fields = 'count(id) as num, sum(amount) as job_amount,topclass, sum((if(wage_min=0 && wage_max>0, wage_max, wage_min)+if(wage_max=0 && wage_min>0, wage_min, wage_max))/2) as total_wage';
  232. $topclass_group = 'topclass';
  233. $topclass_order = 'count(id) desc';
  234. $topclass_rst = $this->jobsService->getAvgWageByGroup($job_where, $company_where, $topclass_fields, $topclass_group, $topclass_order, 10);
  235. $topclass_data = [];
  236. $topclass_amount = [];
  237. $topclass_wage = [];
  238. $topclass_name = [];
  239. if ($topclass_rst) {
  240. foreach ($topclass_rst as $k => $v) {
  241. $topclass_wage[] = round(($v['total_wage']/$v['num']), 2);
  242. $topclass_data[] = $v['num'];
  243. $topclass_amount[] = $v['job_amount'];
  244. $topclass_name[] = $v['name']?$v['name']:'无要求';
  245. }
  246. }
  247. //职位小类(数量靠前职位小类的薪资平均值)
  248. $subclass_fields = 'count(id) as num, sum(amount) as job_amount, category, sum((if(wage_min=0 && wage_max>0, wage_max, wage_min)+if(wage_max=0 && wage_min>0, wage_min, wage_max))/2) as total_wage';
  249. $subclass_group = 'category';
  250. $subclass_order = 'count(id) desc';
  251. $subclass_rst = $this->jobsService->getAvgWageByGroup($job_where, $company_where, $subclass_fields, $subclass_group, $subclass_order, 10);
  252. $subclass_data = [];
  253. $subclass_amount = [];
  254. $subclass_wage = [];
  255. $subclass_name = [];
  256. if ($subclass_rst) {
  257. foreach ($subclass_rst as $k => $v) {
  258. $subclass_wage[] = round(($v['total_wage']/$v['num']), 2);
  259. $subclass_data[] = $v['num'];
  260. $subclass_amount[] = $v['job_amount'];
  261. $subclass_name[] = $v['name'];
  262. }
  263. }
  264. //学历分布(按职位学历要求分组统计职位数量)
  265. $edu_fields = 'count(id) as num, education';
  266. $edu_group = 'education';
  267. $edu_order = 'education asc';
  268. $edu_rst = $this->jobsService->getJobNumsByGroup($job_where, $company_where, $edu_fields, $edu_group, $edu_order);
  269. $edu_data = [];
  270. $edu_names = [];
  271. if ($edu_rst) {
  272. foreach ($edu_rst as $k => $v) {
  273. $edu_data[] = $v['num'];
  274. if ($v['education'] == 0) {
  275. $edu_names[] = '无要求';
  276. } else {
  277. if (array_has($cates['AIX_education'], $v['education'])) {
  278. $edu_names[] = $cates['AIX_education'][$v['education']]['demand'];
  279. } else {
  280. $edu_names[] = '无要求';
  281. }
  282. }
  283. }
  284. }
  285. //工作经验(按职位工作经验要求分组统计职位数量)
  286. $exp_fields = 'count(id) as num, experience';
  287. $exp_group = 'experience';
  288. $exp_rst = $this->jobsService->getJobNumsByGroup($job_where, $company_where, $exp_fields, $exp_group, 'experience asc');
  289. $exp_data = [];
  290. $exp_names = [];
  291. if ($exp_rst) {
  292. foreach ($exp_rst as $k => $v) {
  293. $exp_data[] = $v['num'];
  294. if ($v['experience'] == 0) {
  295. $exp_names[] = '无要求';
  296. } else {
  297. if (array_has($cates['AIX_experience'], $v['experience'])) {
  298. $exp_names[] = $cates['AIX_experience'][$v['experience']]['demand'];
  299. } else {
  300. $exp_names[] = '无要求';
  301. }
  302. }
  303. }
  304. }
  305. $return_data = [
  306. 'date_aprams' => $date_aprams,
  307. 'all_company_num'=>$company_data['all_company_num'],
  308. 'current_company_num'=>$company_data['current_company_num'],
  309. 'all_jobs_num'=>$company_data['all_jobs_num'],
  310. 'current_jobs_num'=>$company_data['current_jobs_num'],
  311. 'all_job_amount' => $company_data['all_job_amount'],
  312. 'current_job_amount' => $company_data['current_job_amount'],
  313. 'action_name' => app('request')->route()->getName(),
  314. 'trade_data' => $trade_data,
  315. 'topclass_data'=> $topclass_data,
  316. 'topclass_amount' => $topclass_amount,
  317. 'topclass_name'=> $topclass_name,
  318. 'topclass_wage'=> $topclass_wage,
  319. 'subclass_data'=> $subclass_data,
  320. 'subclass_name'=> $subclass_name,
  321. 'subclass_wage'=> $subclass_wage,
  322. 'subclass_amount' => $subclass_amount,
  323. 'edu_data' => $edu_data,
  324. 'edu_names' => $edu_names,
  325. 'exp_data' => $exp_data,
  326. 'exp_names' => $exp_names,
  327. ];
  328. return view('statistics.app.company.job_analysis', $return_data);
  329. }
  330. }