|
@@ -6,6 +6,9 @@ use App\Http\Controllers\Api\ApiBaseController;
|
|
|
use App\Models\Company;
|
|
|
use App\Models\Config;
|
|
|
use App\Models\Jobs;
|
|
|
+use App\Models\Recruit;
|
|
|
+use App\Models\RecruitAppointInfo;
|
|
|
+use App\Models\RecruitPost;
|
|
|
use App\Models\Resume;
|
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
|
@@ -50,9 +53,9 @@ class BiController extends ApiBaseController
|
|
|
];
|
|
|
|
|
|
//企业数和岗位数
|
|
|
- $company_count = Company::where('is_jkq',1)->count();
|
|
|
- $job_count = Jobs::whereHas('company',function ($query) {
|
|
|
- $query->where('is_jkq',1);
|
|
|
+ $company_count = Company::where('is_jkq', 1)->count();
|
|
|
+ $job_count = Jobs::whereHas('company', function ($query) {
|
|
|
+ $query->where('is_jkq', 1);
|
|
|
})->count();
|
|
|
$data['total_count'] = [
|
|
|
['name' => '企业数', 'count' => $company_count],
|
|
@@ -61,7 +64,7 @@ class BiController extends ApiBaseController
|
|
|
];
|
|
|
|
|
|
//企业所属行业
|
|
|
- $company_trade_data = Company::where('is_jkq',1)->select(['trade', DB::raw('count(trade) as count')])->groupBy('trade')->get();
|
|
|
+ $company_trade_data = Company::where('is_jkq', 1)->select(['trade', DB::raw('count(trade) as count')])->groupBy('trade')->get();
|
|
|
$company_trade = [];
|
|
|
$company_trade_other = 0;
|
|
|
foreach ($company_trade_data as $v) {
|
|
@@ -96,8 +99,8 @@ class BiController extends ApiBaseController
|
|
|
$data['company_trade'] = $company_trade;
|
|
|
|
|
|
//企业需求工种
|
|
|
- $job_category_data = Jobs::whereHas('company',function ($query) {
|
|
|
- $query->where('is_jkq',1);
|
|
|
+ $job_category_data = Jobs::whereHas('company', function ($query) {
|
|
|
+ $query->where('is_jkq', 1);
|
|
|
})->select(['topclass', DB::raw('count(topclass) as count')])->groupBy('topclass')->get();
|
|
|
$job_category = [];
|
|
|
$job_category_other = 0;
|
|
@@ -133,17 +136,17 @@ class BiController extends ApiBaseController
|
|
|
$data['job_category'] = $job_category;
|
|
|
|
|
|
//企业薪酬范围
|
|
|
- $job_wage_1 = Jobs::whereHas('company',function ($query) {
|
|
|
- $query->where('is_jkq',1);
|
|
|
+ $job_wage_1 = Jobs::whereHas('company', function ($query) {
|
|
|
+ $query->where('is_jkq', 1);
|
|
|
})->where('wage_min', '<=', 3000)->count();
|
|
|
- $job_wage_2 = Jobs::whereHas('company',function ($query) {
|
|
|
- $query->where('is_jkq',1);
|
|
|
+ $job_wage_2 = Jobs::whereHas('company', function ($query) {
|
|
|
+ $query->where('is_jkq', 1);
|
|
|
})->where('wage_min', '>=', 3000)->where('wage_min', '<', 5000)->count();
|
|
|
- $job_wage_3 = Jobs::whereHas('company',function ($query) {
|
|
|
- $query->where('is_jkq',1);
|
|
|
+ $job_wage_3 = Jobs::whereHas('company', function ($query) {
|
|
|
+ $query->where('is_jkq', 1);
|
|
|
})->where('wage_min', '>=', 5000)->where('wage_min', '<', 10000)->count();
|
|
|
- $job_wage_4 = Jobs::whereHas('company',function ($query) {
|
|
|
- $query->where('is_jkq',1);
|
|
|
+ $job_wage_4 = Jobs::whereHas('company', function ($query) {
|
|
|
+ $query->where('is_jkq', 1);
|
|
|
})->where('wage_max', '>=', 10000)->count();
|
|
|
$data['job_wage'] = [
|
|
|
['name' => '3000以下/月', 'count' => $job_wage_1],
|
|
@@ -153,8 +156,8 @@ class BiController extends ApiBaseController
|
|
|
];
|
|
|
|
|
|
//企业学历范围
|
|
|
- $job_education_data = Jobs::whereHas('company',function ($query) {
|
|
|
- $query->where('is_jkq',1);
|
|
|
+ $job_education_data = Jobs::whereHas('company', function ($query) {
|
|
|
+ $query->where('is_jkq', 1);
|
|
|
})->select(['education', DB::raw('count(education) as count')])->groupBy('education')->get();
|
|
|
$job_education = [];
|
|
|
$job_education_other = 0;
|
|
@@ -268,6 +271,140 @@ class BiController extends ApiBaseController
|
|
|
return response()->json($data);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 聚合
|
|
|
+ */
|
|
|
+ public function agg()
|
|
|
+ {
|
|
|
+ $data = [];
|
|
|
+
|
|
|
+ //求职者性别
|
|
|
+ $resume_sex_data = Resume::select(['sex', DB::raw('count(sex) as count')])->groupBy('sex')->get();
|
|
|
+ $resume_sex = [];
|
|
|
+ $resume_total = 0;
|
|
|
+ foreach ($resume_sex_data as $v) {
|
|
|
+ $resume_total += $v['count'];
|
|
|
+ switch ($v['sex']) {
|
|
|
+ case 0:
|
|
|
+ $resume_sex[] = ['name' => '未知', 'count' => $v['count']];
|
|
|
+ break;
|
|
|
+ case 1:
|
|
|
+ $resume_sex[] = ['name' => '男', 'count' => $v['count']];
|
|
|
+ break;
|
|
|
+ case 2:
|
|
|
+ $resume_sex[] = ['name' => '女', 'count' => $v['count']];
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ $resume_sex[] = ['name' => '总人数', 'count' => $resume_total];
|
|
|
+ $data['resume_sex'] = $resume_sex;
|
|
|
+
|
|
|
+ //求职者求职工种
|
|
|
+ $resume_trade_1 = Resume::where('trade', 'like', "11%")->count();
|
|
|
+ $resume_trade_2 = Resume::where('trade', 'like', "13%")->count();
|
|
|
+ $resume_trade_3 = Resume::where('trade', 'like', "14%")->count();
|
|
|
+ $resume_trade_4 = Resume::where('trade', 'like', "19%")->count();
|
|
|
+ $resume_trade_5 = Resume::where('trade', 'like', "21%")->count();
|
|
|
+ $resume_trade_6 = Resume::where('trade', 'like', "36%")->count();
|
|
|
+ $resume_trade_7 = Resume::where('trade', 'like', "37%")->count();
|
|
|
+ $data['resume_trade'] = [
|
|
|
+ ['name' => '贸易/进出口', 'count' => $resume_trade_1],
|
|
|
+ ['name' => '消费品(食/饮/烟酒)', 'count' => $resume_trade_2],
|
|
|
+ ['name' => '服装/纺织/皮革', 'count' => $resume_trade_3],
|
|
|
+ ['name' => '制药/生物工程', 'count' => $resume_trade_4],
|
|
|
+ ['name' => '医疗设备/器械', 'count' => $resume_trade_5],
|
|
|
+ ['name' => '酒店/旅游', 'count' => $resume_trade_6],
|
|
|
+ ['name' => '交通/运输/物流', 'count' => $resume_trade_7],
|
|
|
+ ['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)],
|
|
|
+ ];
|
|
|
+
|
|
|
+ //求职者年龄分布
|
|
|
+ $year = date('Y');
|
|
|
+ $resume_age_1 = Resume::where('birthdate', '>', $year - 30)->count();
|
|
|
+ $resume_age_2 = Resume::where('birthdate', '>', $year - 39)->where('birthdate', '<', $year - 30)->count();
|
|
|
+ $resume_age_3 = Resume::where('birthdate', '>', $year - 49)->where('birthdate', '<', $year - 40)->count();
|
|
|
+ $resume_age_4 = Resume::where('birthdate', '<', $year - 50)->count();
|
|
|
+ $data['resume_age'] = [
|
|
|
+ ['name' => '30岁以下', 'count' => $resume_age_1],
|
|
|
+ ['name' => '30-39岁', 'count' => $resume_age_2],
|
|
|
+ ['name' => '40-49岁', 'count' => $resume_age_3],
|
|
|
+ ['name' => '50岁以上', 'count' => $resume_age_4],
|
|
|
+ ];
|
|
|
+
|
|
|
+ //求职者学历分布
|
|
|
+ $resume_education_data = Resume::select(['education', DB::raw('count(education) as count')])->groupBy('education')->get();
|
|
|
+ $resume_education = [];
|
|
|
+ $resume_education_other = 0;
|
|
|
+ foreach ($resume_education_data as $v) {
|
|
|
+ switch ($v['education']) {
|
|
|
+ case 69:
|
|
|
+ $resume_education[] = ['name' => '大专', 'count' => $v['count']];
|
|
|
+ break;
|
|
|
+ case 70:
|
|
|
+ $resume_education[] = ['name' => '本科', 'count' => $v['count']];
|
|
|
+ break;
|
|
|
+ case 71:
|
|
|
+ $resume_education[] = ['name' => '硕士', 'count' => $v['count']];
|
|
|
+ break;
|
|
|
+ case 72:
|
|
|
+ $resume_education[] = ['name' => '博士', 'count' => $v['count']];
|
|
|
+ break;
|
|
|
+ case 73:
|
|
|
+ $resume_education[] = ['name' => '博士后', 'count' => $v['count']];
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ $resume_education_other += $v['count'];
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ $resume_education[] = ['name' => '其他', 'count' => $resume_education_other];
|
|
|
+ $data['resume_education'] = $resume_education;
|
|
|
+
|
|
|
+ //招考数据
|
|
|
+ $data['recruit_count'] = Recruit::where(1)->count();
|
|
|
+ $data['recruit_post'] = RecruitPost::where(1)->count();
|
|
|
+ $data['recruit_apply'] = RecruitAppointInfo::where(1)->count();
|
|
|
+
|
|
|
+ //学历和年龄
|
|
|
+ $recruit_apply_data = RecruitAppointInfo::select(['birthday','education'])->get();
|
|
|
+ $recruit_education = [
|
|
|
+ '专科' => ['name' => '专科', 'count' => 0],
|
|
|
+ '本科' => ['name' => '本科', 'count' => 0],
|
|
|
+ '硕士' => ['name' => '硕士', 'count' => 0],
|
|
|
+ '博士' => ['name' => '博士', 'count' => 0],
|
|
|
+ '其他' => ['name' => '其他', 'count' => 0],
|
|
|
+ ];
|
|
|
+ $recruit_age = [
|
|
|
+ '30岁及以下' => ['name' => '30岁及以下', 'count' => 0],
|
|
|
+ '30到35岁' => ['name' => '30到35岁', 'count' => 0],
|
|
|
+ '35到40岁' => ['name' => '35到40岁', 'count' => 0],
|
|
|
+ '40岁以上' => ['name' => '40岁以上', 'count' => 0],
|
|
|
+ ];
|
|
|
+ foreach ($recruit_apply_data as $v) {
|
|
|
+ if (!empty($recruit_education[$v['education']])) {
|
|
|
+ $recruit_education[$v['education']]['count']++;
|
|
|
+ } else {
|
|
|
+ $recruit_education['其他']['count']++;
|
|
|
+ }
|
|
|
+
|
|
|
+ $birth = mb_substr($v['birthday'], 0, 4);
|
|
|
+ if ($birth >= ($year - 30)) {
|
|
|
+ $recruit_age['30岁及以下']['count']++;
|
|
|
+ } elseif ($birth >= ($year - 35) && $birth < ($year - 30)) {
|
|
|
+ $recruit_age['30到35岁']['count']++;
|
|
|
+ } elseif ($birth >= ($year - 40) && $birth < ($year - 35)) {
|
|
|
+ $recruit_age['35到40岁']['count']++;
|
|
|
+ } else {
|
|
|
+ $recruit_age['40岁以上']['count']++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ $data['recruit_education'] = array_values($recruit_education);
|
|
|
+ $data['recruit_age'] = array_values($recruit_age);
|
|
|
+
|
|
|
+ return response()->json($data);
|
|
|
+ }
|
|
|
+
|
|
|
private function _valueToKey($arr, $key)
|
|
|
{
|
|
|
$res = [];
|