BiController.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266
  1. <?php
  2. namespace App\Http\Controllers\Api\Config;
  3. use App\Http\Controllers\Api\ApiBaseController;
  4. use App\Models\Company;
  5. use App\Models\Config;
  6. use App\Models\Jobs;
  7. use App\Models\Resume;
  8. use Illuminate\Support\Facades\DB;
  9. class BiController extends ApiBaseController
  10. {
  11. public function jkq()
  12. {
  13. $data = [];
  14. //人才数据
  15. $talent = Config::whereIn('type_id', [78, 79, 80, 81, 82])->get();
  16. $talent = $this->_valueToKey($talent, 'alias');
  17. $data['talent_level'] = [
  18. ['name' => '第一层次', 'count' => (int)$talent['talent_level_1']['value']],
  19. ['name' => '第二层次', 'count' => (int)$talent['talent_level_2']['value']],
  20. ['name' => '第三层次', 'count' => (int)$talent['talent_level_3']['value']],
  21. ['name' => '第四层次', 'count' => (int)$talent['talent_level_4']['value']],
  22. ['name' => '第五层次', 'count' => (int)$talent['talent_level_5']['value']],
  23. ['name' => '第六层次', 'count' => (int)$talent['talent_level_6']['value']],
  24. ['name' => '第七层次', 'count' => (int)$talent['talent_level_7']['value']],
  25. ];
  26. $data['talent_industry'] = [
  27. ['name' => $talent['talent_industry_trade']['name'], 'count' => (int)$talent['talent_industry_trade']['value']],
  28. ['name' => $talent['talent_industry_goods']['name'], 'count' => (int)$talent['talent_industry_goods']['value']],
  29. ['name' => $talent['talent_industry_clothing']['name'], 'count' => (int)$talent['talent_industry_clothing']['value']],
  30. ['name' => $talent['talent_industry_drug']['name'], 'count' => (int)$talent['talent_industry_drug']['value']],
  31. ['name' => $talent['talent_industry_medical']['name'], 'count' => (int)$talent['talent_industry_medical']['value']],
  32. ['name' => $talent['talent_industry_hotel']['name'], 'count' => (int)$talent['talent_industry_hotel']['value']],
  33. ['name' => $talent['talent_industry_traffic']['name'], 'count' => (int)$talent['talent_industry_traffic']['value']],
  34. ['name' => $talent['talent_industry_other']['name'], 'count' => (int)$talent['talent_industry_other']['value']],
  35. ];
  36. $data['talent_age'] = [
  37. ['name' => $talent['talent_age_1']['name'], 'count' => (int)$talent['talent_age_1']['value']],
  38. ['name' => $talent['talent_age_2']['name'], 'count' => (int)$talent['talent_age_2']['value']],
  39. ['name' => $talent['talent_age_3']['name'], 'count' => (int)$talent['talent_age_3']['value']],
  40. ['name' => $talent['talent_age_4']['name'], 'count' => (int)$talent['talent_age_4']['value']],
  41. ];
  42. $data['talent_education'] = [
  43. ['name' => $talent['talent_education_1']['name'], 'count' => (int)$talent['talent_education_1']['value']],
  44. ['name' => $talent['talent_education_2']['name'], 'count' => (int)$talent['talent_education_2']['value']],
  45. ['name' => $talent['talent_education_3']['name'], 'count' => (int)$talent['talent_education_3']['value']],
  46. ];
  47. //企业数和岗位数
  48. $company_count = Company::count();
  49. $job_count = Jobs::count();
  50. $data['total_count'] = [
  51. ['name' => '企业数', 'count' => $company_count],
  52. ['name' => '岗位数', 'count' => $job_count],
  53. ['name' => '硕博人才数', 'count' => (int)$talent['talent_total']['value']],
  54. ];
  55. //企业所属行业
  56. $company_trade_data = Company::select(['trade', DB::raw('count(trade) as count')])->groupBy('trade')->get();
  57. $company_trade = [];
  58. $company_trade_other = 0;
  59. foreach ($company_trade_data as $v) {
  60. switch ($v['trade']) {
  61. case 11:
  62. $company_trade[] = ['name' => '贸易/进出口', 'count' => $v['count']];
  63. break;
  64. case 13:
  65. $company_trade[] = ['name' => '消费品(食/饮/烟酒)', 'count' => $v['count']];
  66. break;
  67. case 14:
  68. $company_trade[] = ['name' => '服装/纺织/皮革', 'count' => $v['count']];
  69. break;
  70. case 19:
  71. $company_trade[] = ['name' => '制药/生物工程', 'count' => $v['count']];
  72. break;
  73. case 21:
  74. $company_trade[] = ['name' => '医疗设备/器械', 'count' => $v['count']];
  75. break;
  76. case 36:
  77. $company_trade[] = ['name' => '酒店/旅游', 'count' => $v['count']];
  78. break;
  79. case 37:
  80. $company_trade[] = ['name' => '交通/运输/物流', 'count' => $v['count']];
  81. break;
  82. default:
  83. $company_trade_other += $v['count'];
  84. break;
  85. }
  86. }
  87. $company_trade[] = ['name' => '其他', 'count' => $company_trade_other];
  88. $data['company_trade'] = $company_trade;
  89. //企业需求工种
  90. $job_category_data = Jobs::select(['topclass', DB::raw('count(topclass) as count')])->groupBy('topclass')->get();
  91. $job_category = [];
  92. $job_category_other = 0;
  93. foreach ($job_category_data as $v) {
  94. switch ($v['topclass']) {
  95. case 1:
  96. $job_category[] = ['name' => '销售|市场|客服|贸易', 'count' => $v['count']];
  97. break;
  98. case 74:
  99. $job_category[] = ['name' => '计算机|通信', 'count' => $v['count']];
  100. break;
  101. case 96:
  102. $job_category[] = ['name' => '服装/纺织/皮革', 'count' => $v['count']];
  103. break;
  104. case 116:
  105. $job_category[] = ['name' => '生产|质管|技工', 'count' => $v['count']];
  106. break;
  107. case 136:
  108. $job_category[] = ['name' => '电子|电气|能源|化工', 'count' => $v['count']];
  109. break;
  110. case 225:
  111. $job_category[] = ['name' => '医疗|制药|环保', 'count' => $v['count']];
  112. break;
  113. case 258:
  114. $job_category[] = ['name' => '学生|社工|科研|农业|其他', 'count' => $v['count']];
  115. break;
  116. default:
  117. $job_category_other += $v['count'];
  118. break;
  119. }
  120. }
  121. $job_category[] = ['name' => '其他', 'count' => $job_category_other];
  122. $data['job_category'] = $job_category;
  123. //企业薪酬范围
  124. $job_wage_1 = Jobs::where('wage_min', '<=', 3000)->count();
  125. $job_wage_2 = Jobs::where('wage_min', '>=', 3000)->where('wage_min', '<', 5000)->count();
  126. $job_wage_3 = Jobs::where('wage_min', '>=', 5000)->where('wage_min', '<', 10000)->count();
  127. $job_wage_4 = Jobs::where('wage_max', '>=', 10000)->count();
  128. $data['job_wage'] = [
  129. ['name' => '3000以下/月', 'count' => $job_wage_1],
  130. ['name' => '3000-5000/月', 'count' => $job_wage_2],
  131. ['name' => '5000-10000/月', 'count' => $job_wage_3],
  132. ['name' => '10000以上/月', 'count' => $job_wage_4],
  133. ];
  134. //企业学历范围
  135. $job_education_data = Jobs::select(['education', DB::raw('count(education) as count')])->groupBy('education')->get();
  136. $job_education = [];
  137. $job_education_other = 0;
  138. foreach ($job_education_data as $v) {
  139. switch ($v['education']) {
  140. case 69:
  141. $job_education[] = ['name' => '大专', 'count' => $v['count']];
  142. break;
  143. case 70:
  144. $job_education[] = ['name' => '本科', 'count' => $v['count']];
  145. break;
  146. case 71:
  147. $job_education[] = ['name' => '硕士', 'count' => $v['count']];
  148. break;
  149. case 72:
  150. $job_education[] = ['name' => '博士', 'count' => $v['count']];
  151. break;
  152. case 73:
  153. $job_education[] = ['name' => '博士后', 'count' => $v['count']];
  154. break;
  155. default:
  156. $job_education_other += $v['count'];
  157. break;
  158. }
  159. }
  160. $job_education[] = ['name' => '其他', 'count' => $job_education_other];
  161. $data['job_education'] = $job_education;
  162. //求职者性别
  163. $resume_sex_data = Resume::select(['sex', DB::raw('count(sex) as count')])->groupBy('sex')->get();
  164. $resume_sex = [];
  165. $resume_total = 0;
  166. foreach ($resume_sex_data as $v) {
  167. $resume_total += $v['count'];
  168. switch ($v['sex']) {
  169. case 0:
  170. $resume_sex[] = ['name' => '未知', 'count' => $v['count']];
  171. break;
  172. case 1:
  173. $resume_sex[] = ['name' => '男', 'count' => $v['count']];
  174. break;
  175. case 2:
  176. $resume_sex[] = ['name' => '女', 'count' => $v['count']];
  177. break;
  178. }
  179. }
  180. $resume_sex[] = ['name' => '总人数', 'count' => $resume_total];
  181. $data['resume_sex'] = $resume_sex;
  182. //求职者求职工种
  183. $resume_trade_1 = Resume::where('trade', 'like', "11%")->count();
  184. $resume_trade_2 = Resume::where('trade', 'like', "13%")->count();
  185. $resume_trade_3 = Resume::where('trade', 'like', "14%")->count();
  186. $resume_trade_4 = Resume::where('trade', 'like', "19%")->count();
  187. $resume_trade_5 = Resume::where('trade', 'like', "21%")->count();
  188. $resume_trade_6 = Resume::where('trade', 'like', "36%")->count();
  189. $resume_trade_7 = Resume::where('trade', 'like', "37%")->count();
  190. $data['resume_trade'] = [
  191. ['name' => '贸易/进出口', 'count' => $resume_trade_1],
  192. ['name' => '消费品(食/饮/烟酒)', 'count' => $resume_trade_2],
  193. ['name' => '服装/纺织/皮革', 'count' => $resume_trade_3],
  194. ['name' => '制药/生物工程', 'count' => $resume_trade_4],
  195. ['name' => '医疗设备/器械', 'count' => $resume_trade_5],
  196. ['name' => '酒店/旅游', 'count' => $resume_trade_6],
  197. ['name' => '交通/运输/物流', 'count' => $resume_trade_7],
  198. ['name' => '其他', 'count' => ($resume_total - $resume_trade_1 - $resume_trade_2 - $resume_trade_3 - $resume_trade_4 - $resume_trade_5 - $resume_trade_6 - $resume_trade_7)],
  199. ];
  200. //求职者年龄分布
  201. $year = date('Y');
  202. $resume_age_1 = Resume::where('birthdate', '>', $year - 30)->count();
  203. $resume_age_2 = Resume::where('birthdate', '>', $year - 39)->where('birthdate', '<', $year - 30)->count();
  204. $resume_age_3 = Resume::where('birthdate', '>', $year - 49)->where('birthdate', '<', $year - 40)->count();
  205. $resume_age_4 = Resume::where('birthdate', '<', $year - 50)->count();
  206. $data['resume_age'] = [
  207. ['name' => '30岁以下', 'count' => $resume_age_1],
  208. ['name' => '30-39岁', 'count' => $resume_age_2],
  209. ['name' => '40-49岁', 'count' => $resume_age_3],
  210. ['name' => '50岁以上', 'count' => $resume_age_4],
  211. ];
  212. //求职者学历分布
  213. $resume_education_data = Resume::select(['education', DB::raw('count(education) as count')])->groupBy('education')->get();
  214. $resume_education = [];
  215. $resume_education_other = 0;
  216. foreach ($resume_education_data as $v) {
  217. switch ($v['education']) {
  218. case 69:
  219. $resume_education[] = ['name' => '大专', 'count' => $v['count']];
  220. break;
  221. case 70:
  222. $resume_education[] = ['name' => '本科', 'count' => $v['count']];
  223. break;
  224. case 71:
  225. $resume_education[] = ['name' => '硕士', 'count' => $v['count']];
  226. break;
  227. case 72:
  228. $resume_education[] = ['name' => '博士', 'count' => $v['count']];
  229. break;
  230. case 73:
  231. $resume_education[] = ['name' => '博士后', 'count' => $v['count']];
  232. break;
  233. default:
  234. $resume_education_other += $v['count'];
  235. break;
  236. }
  237. }
  238. $resume_education[] = ['name' => '其他', 'count' => $resume_education_other];
  239. $data['resume_education'] = $resume_education;
  240. return response()->json($data);
  241. }
  242. private function _valueToKey($arr, $key)
  243. {
  244. $res = [];
  245. foreach ($arr as $v) {
  246. $res[$v[$key]] = $v;
  247. }
  248. return $res;
  249. }
  250. }