123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888 |
- <?php
- namespace App\Services\Common;
- use App\Exceptions\ResponseException;
- use App\Models\Resume;
- use App\Models\Jobs;
- use App\Models\Company;
- use App\Models\MemberShuobo;
- use App\Models\PersonShieldCompany;
- use App\Repositories\PersonalJobsApplyRepository;
- use App\Search\Builders\SubBuilder;
- use App\Services\Company\JobsService;
- use App\Services\Company\CompanyService;
- use App\Services\Person\ResumeService;
- use Illuminate\Support\Facades\Cache;
- /**
- * 职位、简历、企业搜索
- * Class SearchService
- * @package App\Services\Common
- */
- class SearchService
- {
- protected $personalJobsApplyRepository;
- protected $jobsService;
- protected $companyService;
- protected $resumeService;
- /**
- * SearchService constructor.
- * @param $personalJobsApplyRepository
- * @param $jobsService
- * @param $companyService
- * @param $resumeService
- */
- public function __construct(PersonalJobsApplyRepository $personalJobsApplyRepository, JobsService $jobsService, CompanyService $companyService, ResumeService $resumeService)
- {
- $this->personalJobsApplyRepository = $personalJobsApplyRepository;
- $this->jobsService = $jobsService;
- $this->companyService = $companyService;
- $this->resumeService = $resumeService;
- }
- //首页知名企业
- public function searchSeatmealCompanies($params, $type = '')
- {
- $list = [];
- $where = [
- ['utype', '=', 1],
- ['user_status', '=', 1],
- ];
- if ($type == '') {
- $where[] = ['job_audit_num', '>', 0];
- if (config('aix.companyset.comset.show_set.jobs_display') == 1) {
- $where[] = ['audit', '=', 1];
- //$where[] = array('job_audit_num','>',0);
- } else {
- $where[] = ['audit', '<>', 3];
- //$where[] = array('job_sum_num','>',0);
- }
- }
- if (array_has($params, 'seatmeal')) {
- $where[] = ['setmeal_id', '>', $params['seatmeal']];
- $where[] = ['members_setmeal.expire', '=', 0];
- }
- $where[] = ['subsite_ids', '=', get_subsite_id()];
- if (array_has($params, 'id')) {
- $where[] = ['id', 'in', $params['id']];
- }
- $order_by = ['job_new_refresh' => 'desc'];
- $limit = '';
- if (array_has($params, 'size')) {
- $limit = $params['size'];
- }
- $callback = function ($query) {
- $query->with(['job' => function ($query) {
- $job_count_map = [['valid', '=', 1], ['display', '=', 1]];
- if (config('aix.companyset.comset.show_set.jobs_display') == 1) {
- $job_count_map[] = ['audit', '=', '1'];
- } else {
- $job_count_map[] = ['audit', '<>', '3'];
- }
- $query->where($job_count_map)->whereHas('subsites', function ($query) {
- $query->where('subsite_id', get_subsite_id());
- })->orderBy('refresh_time', 'DESC');
- }]);
- };
- $recommend_job_lists = $this->search('Company', $where, $order_by, '', $limit, '', $callback, true);
- if ($recommend_job_lists->total() > 0) {
- $list = $this->companyService->dealSetmealCompany($recommend_job_lists->items(), $params);
- }
- return $list;
- }
- //紧急招聘
- public function searchEmergencyJobs($limit = 10)
- {
- $emergency_jobs = [];
- $emergency_where = [
- ['valid', '=', '1'],
- ['emergency', '=', '1'],
- ['display', '=', 1],
- ['subsite_ids', '=', get_subsite_id()],
- ];
- if (config('aix.companyset.comset.show_set.jobs_display') == 1) {
- $emergency_where[] = ['audit', '=', 1];
- } else {
- $emergency_where[] = ['audit', '<>', 3];
- }
- $emergency_job_list = $this->search('Job', $emergency_where, 'stime', '', $limit, 1);
- if ($emergency_job_list->total() > 0) {
- $emergency_jobs = $this->jobsService->dealjobList($emergency_job_list->items(), $limit);
- }
- return $emergency_jobs;
- }
- //推荐职位
- public function searchRecommendJobs($limit = 10, $user = [], $type = '')
- {
- $recommend_job_items = [];
- $recommend_where = $this->jobsService->getRecommendWhere($user);
- $recommend_order = $this->jobsService->getRecommendOrder($user);
- if (!$user || ($user && $user->utype == 1)) {
- $recommend_order = ['stime' => 'desc', 'refresh_time' => 'desc'];
- }
- if ($recommend_where) {
- if ($type == '') {
- $recommend_job_lists = $this->getRecommends($user, 'Job', $recommend_where, $recommend_order, '', $limit, 1);
- } else {
- $recommend_job_lists = $this->getRecommends($user, 'Job', $recommend_where, $recommend_order, '', $limit);
- }
- } else {
- $recommend_job_lists = null;
- }
- if ($type == 'show_other') {
- //判断职位数量是否足够页面需求,不满足时已击量很高、置顶、刷新靠前的职位补足(职位不能重复)
- if ($recommend_job_lists && $recommend_job_lists->total() >= $limit) {
- $recommend_job_items = $this->jobsService->dealjobFilelds($recommend_job_lists->items(), [], $limit);
- } else {
- $jids = [];
- if ($recommend_job_lists) {
- $jids = $recommend_job_lists->pluck('id')->toArray();
- }
- $click_jobs_rst = $this->getClickJobs($limit);
- if ($click_jobs_rst->total() > 0) {
- $click_jobs = $click_jobs_rst->items();
- } else {
- $click_jobs = [];
- }
- if ($click_jobs && $jids) {
- foreach ($click_jobs as $k => $v) {
- if (in_array($v->id, $jids)) {
- unset($click_jobs[$k]);
- }
- }
- }
- $recommend_jobs = $recommend_job_lists ? $recommend_job_lists->items() : [];
- $recommend_total = $recommend_job_lists ? $recommend_job_lists->total() : 0;
- $need_jobs = array_slice($click_jobs, 0, $limit - $recommend_total);
- $all_jobs = array_merge($recommend_jobs, $need_jobs);
- $recommend_job_items = array_slice($all_jobs, 0, $limit);
- $recommend_job_items = $this->jobsService->dealjobFilelds($recommend_job_items);
- }
- } elseif ($type == 'show_page') {
- return $recommend_job_lists;
- } else {
- if ($recommend_job_lists && $recommend_job_lists->total() > 0) {
- $recommend_job_items = $this->jobsService->dealjobFilelds($recommend_job_lists->items(), [], $limit);
- }
- }
- return $recommend_job_items;
- }
- //获取点击量高的职位
- public function getClickJobs($limit = 50)
- {
- $where[] = ['valid', '=', 1];
- $where[] = ['display', '=', 1];
- if (config('aix.companyset.comset.show_set.jobs_display') == 1) {
- $where[] = ['audit', '=', 1];
- } else {
- $where[] = ['audit', '<>', 3];
- }
- $where[] = ['subsite_ids', '=', get_subsite_id()];
- $order = ['click' => 'desc', 'stime' => 'desc', 'refresh_time' => 'desc'];
- return $this->search('Job', $where, $order, '', $limit);
- }
- //获取点击量高的简历
- public function getClickResumes($order_by, $job = [], $need_limit = 50)
- {
- $click_where = $this->companyService->getRecommendResumeWhere($job);
- $click_resumes = $this->search('Resume', $click_where, $order_by, '', $need_limit);
- $click_resumes = $click_resumes->items();
- return $click_resumes;
- }
- //照片简历
- public function searchPhotoResumes($limit = 10, $user = [])
- {
- $list = [];
- $order_by = ['stime' => 'desc', 'click' => 'desc', 'updated_at' => 'desc'];
- //获取点击量高的简历
- $click_where = $this->companyService->getRecommendResumeWhere([]);
- //添加照片过滤
- $click_where[] = ['photo', '=', 1];
- $click_where[] = ['member_infos.display_images', '=', 1];
- if (config('aix.personal_set.per_set.show_set.resume_img_display') == 1) {
- $click_where[] = ['photo_audit', '=', 2];
- } else {
- $click_where[] = ['photo_audit', '<>', 0];
- }
- $click_rst = $this->search('Resume', $click_where, $order_by, '', $limit);
- $click_resumes = $click_rst->items();
- //企业用户 - 匹配置顶、刷新靠前的职位
- if ($user && $user->utype == 1) {
- //判断是否有可以匹配的职位
- $where = $this->companyService->getRecommendWhere($user);
- if ($where) {
- $where['and'][] = ['photo', '=', 1];
- if (config('aix.personal_set.per_set.show_set.resume_img_display') == 1) {
- $where['and'][] = ['photo_audit', '=', 2];
- } else {
- $where['and'][] = ['photo_audit', '<>', 0];
- }
- $where['and'][] = ['member_infos.display_images', '=', 1];
- $recommend_resume_lists = $this->getRecommends($user, 'Resume', $where, $order_by, '', $limit);
- $rids = $recommend_resume_lists->pluck('id')->toArray();
- if ($recommend_resume_lists->total() >= $limit) {
- $list = array_slice($recommend_resume_lists->items(), 0, $limit);
- } else {
- //去除已有简历
- if ($click_resumes && $rids) {
- foreach ($click_resumes as $k => $v) {
- if (in_array($v->id, $rids)) {
- unset($click_resumes[$k]);
- }
- }
- }
- $recommend_resumes = $recommend_resume_lists->items();
- $recommend_total = $recommend_resume_lists->total();
- $need_resumes = array_slice($click_resumes, 0, $limit - $recommend_total);
- $all_resumes = array_merge($recommend_resumes, $need_resumes);
- $list = array_slice($all_resumes, 0, $limit);
- }
- } else {
- $list = array_slice($click_resumes, 0, $limit);
- }
- } else {
- $list = array_slice($click_resumes, 0, $limit);
- }
- //处理查询数据
- if ($list) {
- $photo_resumes = $this->resumeService->dealResumeFields($list);
- } else {
- $photo_resumes = [];
- }
- return $photo_resumes;
- }
- //最新简历
- public function searchNewResumes($limit = 10, $user = [])
- {
- $new_resumes = [];
- $where = [];
- $where[] = ['display', '=', 1];
- if (config('aix.personal_set.per_set.show_set.resume_display') == '1') {
- $where[] = ['audit', '=', '2'];
- } else {
- $where[] = ['audit', '<>', '0'];
- }
- $where[] = ['subsite_ids', '=', get_subsite_id()];
- $order_by = ['stick' => 'desc', 'updated_at' => 'desc'];
- $list = $this->search('Resume', $where, $order_by, '', $limit);
- if ($list->total() > 0) {
- $new_resumes = $this->resumeService->dealResumeFields($list->items());
- }
- return $new_resumes;
- }
- //同行业职位
- public function searchCateJobs($job, $limit = 10, $user = [])
- {
- $cate_jobs = [];
- $cate_job_where[] = ['intention_jobs_id', '=', $job->jobcategory_id];
- $cate_job_where[] = ['id', '<>', $job->id];
- if (config('aix.companyset.comset.show_set.jobs_display') == 1) {
- $cate_job_where[] = ['audit', '=', 1];
- } else {
- $cate_job_where[] = ['audit', '<>', 3];
- }
- $cate_job_where[] = ['display', '=', 1];
- $cate_job_where[] = ['valid', '=', 1];
- $cate_job_where[] = ['subsite_ids', '=', get_subsite_id()];
- $cate_job_list = $this->search('Job', $cate_job_where, 'stime', '');
- if ($cate_job_list->total() > 0) {
- $cate_jobs = $this->jobsService->dealjobList($cate_job_list->items(), 6);
- }
- return $cate_jobs;
- }
- //最新招聘职位
- public function searchNewJobs($limit = 20, $page = '')
- {
- $where[] = ['valid', '=', 1];
- $where[] = ['display', '=', 1];
- if (config('aix.companyset.comset.show_set.jobs_display') == 1) {
- $where[] = ['audit', '=', 1];
- } else {
- $where[] = ['audit', '<>', 3];
- }
- $where[] = ['subsite_ids', '=', get_subsite_id()];
- $order = ['refresh_time' => 'desc'];
- $new_job_lists = $this->search('Job', $where, $order, '', $limit, $page);
- $list = [];
- if ($new_job_lists->total() > 0) {
- $list = $this->jobsService->dealjobFilelds($new_job_lists->items(), [], $limit);
- }
- return $list;
- }
- public function getRecommends($user, $model, $where, $order_by, $search_key = '', $limit = 10, $page = '', $callback = null)
- {
- if ($model == 'Resume') {
- $list = Resume::search($search_key);
- if ($callback) {
- $list->query($callback);
- }
- if ($where) {
- $and_where = [];
- $or_where = [];
- if (array_has($where, 'or')) {
- $or_where = $where['or'];
- }
- if (array_has($where, 'and')) {
- $and_where = $where['and'];
- }
- if ($and_where) {
- $wage_max = 0;
- $wage_min = 0;
- foreach ($and_where as $k => $v) {
- if ($v[1] != '=') {
- if ($v[0] == 'birthdate') {
- if ($v[1] == '>=') {
- $list->whereRange('birthdate', $v[2], null);
- } elseif ($v[1] == '<=') {
- $list->whereRange('birthdate', null, $v[2]);
- }
- } elseif ($v[0] == 'updated_at') {
- if ($v[1] == '>=') {
- $list->whereRange('updated_at', $v[2], null);
- } elseif ($v[1] == '<=') {
- $list->whereRange('updated_at', null, $v[2]);
- } elseif ($v[1] == '>') {
- $list->whereRange('updated_at', $v[2], null, false);
- } elseif ($v[1] == '<') {
- $list->whereRange('updated_at', null, $v[2], false);
- }
- } elseif ($v[0] == 'audit') {
- $list->whereNot('audit', $v[2]);
- } elseif ($v[0] == 'wage_max') {
- $wage_max = $v[2] ? $v[2] : null;
- } elseif ($v[0] == 'wage_min') {
- $wage_min = $v[2] ? $v[2] : null;
- } else {
- if ($v[1] == '<>') {
- $list->whereNot($v[0], $v[2]);
- }
- }
- } else {
- $list->where($v[0], $v[2]);
- }
- }
- }
- if ($or_where) {
- $list->where(function (SubBuilder $subBuilder) use ($or_where) {
- foreach ($or_where as $key => $val) {
- $subBuilder->whereOr(function (SubBuilder $subBuilder) use ($val) {
- $wage_min = null;
- $wage_max = null;
- foreach ($val as $k => $v) {
- if ($v[1] != '=') {
- if ($v[0] == 'birthdate') {
- if ($v[1] == '>=') {
- $subBuilder->whereRange('birthdate', $v[2], null);
- } elseif ($v[1] == '<=') {
- $subBuilder->whereRange('birthdate', null, $v[2]);
- }
- } elseif ($v[0] == 'updated_at') {
- $subBuilder->whereRange('updated_at', $v[2], null, false);
- } elseif ($v[0] == 'audit') {
- $subBuilder->whereNot('audit', $v[2]);
- } elseif ($v[0] == 'wage_max') {
- $wage_max = $v[2] ? $v[2] : null;
- } elseif ($v[0] == 'wage_min') {
- $wage_min = $v[2] ? $v[2] : null;
- } else {
- if ($v[1] == '<>') {
- $subBuilder->whereNot($v[0], $v[2]);
- }
- }
- } else {
- $subBuilder->where($v[0], $v[2]);
- }
- }
- if ($wage_max && $wage_min) {
- $subBuilder->where(function (SubBuilder $subBuilder) use ($wage_max, $wage_min) {
- $subBuilder->whereOr(function (SubBuilder $subBuilder) use ($wage_max, $wage_min) {
- $subBuilder->whereRange('wage_min', $wage_min, null)
- ->whereRange('wage_max', null, $wage_max)
- ->whereRange('wage_max', 0, null, false);
- });
- $subBuilder->whereOr('wage', -1);
- });
- } elseif ($wage_min) {
- $subBuilder->where(function (SubBuilder $subBuilder) use ($wage_min) {
- $subBuilder->whereOrRange('wage_min', $wage_min, null);
- $subBuilder->whereOr('wage', -1);
- });
- } elseif ($wage_max) {
- $subBuilder->where(function (SubBuilder $subBuilder) use ($wage_max) {
- $subBuilder->whereOrRange('wage_max', null, $wage_max);
- $subBuilder->whereOr('wage', -1);
- });
- }
- });
- }
- });
- }
- }
- //添加过期时间过滤
- $list->where(function (SubBuilder $subBuilder) {
- $subBuilder->whereOr('expires', 0)->whereOrRange('expires', time(), null);
- });
- if ($user && $user->utype == 1) {
- $list->whereNotIn('person_shield_companys', [$user->id]);
- }
- if (is_array($order_by)) {
- foreach ($order_by as $k => $v) {
- $list->orderBy($k, $v);
- }
- } else {
- $list->orderBy($order_by, 'desc');
- }
- if ($page) {
- return $list->paginate($limit, 'page', $page);
- } else {
- return $list->paginate($limit);
- }
- } elseif ($model == 'Job') {
- $list = Jobs::search($search_key);
- if ($callback) {
- $list->query($callback);
- }
- if ($where) {
- $and_where = [];
- $or_where = [];
- if (array_has($where, 'or')) {
- $or_where = $where['or'];
- }
- if (array_has($where, 'and')) {
- $and_where = $where['and'];
- }
- if ($and_where) {
- foreach ($and_where as $k => $v) {
- if ($v[1] != '=') {
- if ($v[0] == 'audit') {
- $list->whereNot('audit', $v[2]);
- } elseif ($v[0] == 'setmeal_id') {
- if ($v[1] == '>') {
- $list->whereRange('setmeal_id', $v[2], null, false);
- } elseif ($v[1] == '<') {
- $list->whereRange('setmeal_id', null, $v[2], false);
- }
- } elseif ($v[0] == 'updated_at') {
- $list->whereRange('updated_at', $v[2], null, false);
- } else {
- if ($v[1] == 'in') {
- $list->whereIn($v[0], $v[2]);
- } elseif ($v[1] == '>=') {
- $list->whereRange($v[0], $v[2], null);
- } elseif ($v[1] == '<=') {
- $list->whereRange($v[0], null, $v[2]);
- } elseif ($v[1] == '<>') {
- $list->whereNot($v[0], $v[2]);
- } elseif ($v[1] == '>') {
- $list->whereRange($v[0], $v[2], null, false);
- } elseif ($v[1] == '<') {
- $list->whereRange($v[0], null, $v[2], false);
- }
- }
- } else {
- $list->where($v[0], $v[2]);
- }
- }
- }
- if ($or_where) {
- $list->where(function (SubBuilder $subBuilder) use ($or_where) {
- foreach ($or_where as $key => $val) {
- $subBuilder->whereOr(function (SubBuilder $subBuilder) use ($val) {
- $wage_min = null;
- $wage_max = null;
- foreach ($val as $k => $v) {
- if ($v[1] != '=') {
- if ($v[0] == 'audit') {
- $subBuilder->whereNot('audit', $v[2]);
- } elseif ($v[0] == 'setmeal_id') {
- if ($v[1] == '>') {
- $subBuilder->whereRange('setmeal_id', $v[2], null, false);
- } elseif ($v[1] == '<') {
- $subBuilder->whereRange('setmeal_id', null, $v[2], false);
- }
- } elseif ($v[0] == 'updated_at') {
- $subBuilder->whereRange('updated_at', $v[2], null, false);
- } elseif ($v[0] == 'wage_max') {
- $wage_max = $v[2] ? $v[2] : null;
- } elseif ($v[0] == 'wage_min') {
- $wage_min = $v[2] ? $v[2] : null;
- } else {
- if ($v[1] == 'in') {
- $subBuilder->whereIn($v[0], $v[2]);
- } elseif ($v[1] == '>=') {
- $subBuilder->whereRange($v[0], $v[2], null);
- } elseif ($v[1] == '<=') {
- $subBuilder->whereRange($v[0], null, $v[2]);
- } elseif ($v[1] == '<>') {
- $subBuilder->whereNot($v[0], $v[2]);
- } elseif ($v[1] == '>') {
- $subBuilder->whereRange($v[0], $v[2], null, false);
- } elseif ($v[1] == '<') {
- $subBuilder->whereRange($v[0], null, $v[2], false);
- }
- }
- } else {
- $subBuilder->where($v[0], $v[2]);
- }
- }
- if ($wage_max && $wage_min) {
- $subBuilder->where(function (SubBuilder $subBuilder) use ($wage_max, $wage_min) {
- $subBuilder->whereOr(function (SubBuilder $subBuilder) use ($wage_max, $wage_min) {
- $subBuilder->whereRange('wage_min', $wage_min, null)
- ->whereRange('wage_max', null, $wage_max)
- ->whereRange('wage_max', 0, null, false);
- });
- $subBuilder->whereOr('wage', -1);
- });
- } elseif ($wage_min) {
- $subBuilder->where(function (SubBuilder $subBuilder) use ($wage_min) {
- $subBuilder->whereOrRange('wage_min', $wage_min, null);
- $subBuilder->whereOr('wage', -1);
- });
- } elseif ($wage_max) {
- $subBuilder->where(function (SubBuilder $subBuilder) use ($wage_max) {
- $subBuilder->whereOrRange('wage_max', null, $wage_max);
- $subBuilder->whereOr('wage', -1);
- });
- }
- });
- }
- });
- }
- }
- if ($order_by) {
- if (is_array($order_by)) {
- foreach ($order_by as $k => $v) {
- $list->orderBy($k, $v);
- }
- } else {
- $list->orderBy($order_by, 'desc');
- }
- } else {
- $list->orderBy('refresh_time', 'desc');
- }
- if ($page) {
- return $list->paginate($limit, 'page', $page);
- } else {
- return $list->paginate($limit);
- }
- }
- }
- public function search($model, $where, $order_by, $search_key = '', $limit = 10, $page = '', $callback = null, $compan_order = false)
- {
- if ($model == 'Resume') {
- $list = Resume::search($search_key);
- if ($callback) {
- $list->query($callback);
- }
- if ($where) {
- $wage_min = null;
- $wage_max = null;
- foreach ($where as $k => $v) {
- if ($v[1] != '=') {
- if ($v[0] == 'birthdate') {
- if ($v[1] == '>=') {
- $list->whereRange('birthdate', $v[2], null);
- } elseif ($v[1] == '<=') {
- $list->whereRange('birthdate', null, $v[2]);
- }
- } elseif ($v[0] == 'updated_at') {
- $list->whereRange('updated_at', $v[2], null, false);
- } elseif ($v[0] == 'audit') {
- $list->whereNot('audit', $v[2]);
- } elseif ($v[0] == 'wage_max') {
- $wage_max = $v[2] ? $v[2] : null;
- } elseif ($v[0] == 'wage_min') {
- $wage_min = $v[2] ? $v[2] : null;
- } else {
- if ($v[1] == 'in') {
- $list->whereIn($v[0], $v[2]);
- } elseif ($v[1] == '>=') {
- $list->whereRange($v[0], $v[2], null);
- } elseif ($v[1] == '<=') {
- $list->whereRange($v[0], null, $v[2]);
- } elseif ($v[1] == '<>') {
- $list->whereNot($v[0], $v[2]);
- } elseif ($v[1] == 'in') {
- $list->whereIn($v[0], $v[2]);
- }
- }
- } else {
- $list->where($v[0], $v[2]);
- }
- }
- //期望薪资过滤
- if ($wage_max && $wage_min) {
- $list->where(function (SubBuilder $subBuilder) use ($wage_max, $wage_min) {
- $subBuilder->whereOr(function (SubBuilder $subBuilder) use ($wage_max, $wage_min) {
- $subBuilder->whereRange('wage_min', $wage_min, null)
- ->whereRange('wage_max', null, $wage_max)
- ->whereRange('wage_max', 0, null, false);
- });
- $subBuilder->whereOr('wage', -1);
- });
- } elseif ($wage_min) {
- $list->where(function (SubBuilder $subBuilder) use ($wage_min) {
- $subBuilder->whereOrRange('wage_min', $wage_min, null);
- $subBuilder->whereOr('wage', -1);
- });
- } elseif ($wage_max) {
- $list->where(function (SubBuilder $subBuilder) use ($wage_max) {
- $subBuilder->whereOrRange('wage_max', null, $wage_max);
- $subBuilder->whereOr('wage', -1);
- });
- }
- }
- //添加过期时间过滤
- $list->where(function (SubBuilder $subBuilder) {
- $subBuilder->whereOr('expires', 0)->whereOrRange('expires', time(), null);
- });
- if (auth('web-company')->check()) {
- $list->whereNotIn('person_shield_companys', [auth('web-company')->user()->id]);
- }
- if (is_array($order_by)) {
- foreach ($order_by as $k => $v) {
- $list->orderBy($k, $v);
- }
- } else {
- $list->orderBy($order_by, 'desc');
- }
- if ($page) {
- return $list->paginate($limit, 'page', $page);
- } else {
- return $list->paginate($limit);
- }
- } elseif ($model == 'Job') {
- $list = Jobs::search($search_key);
- if ($callback) {
- $list->query($callback);
- }
- if ($where) {
- //申请过滤
- if (array_has($where, 'apply')) {
- $apply = $where['apply'];
- unset($where['apply']);
- if ($apply && auth('web-member')->check()) {
- //获取当前用户一段时间间隔内所有申请记录
- $space_time = (integer)config('aix.personal_set.per_set.per_set.apply_job_space');
- if ($space_time > 0) {
- $stime = date('Y-m-d H:i:s', strtotime(date("Y-m-d", strtotime("-" . $space_time . " day"))));
- $apply_where = [['personal_uid', '=', auth('web-member')->user()->id], ['created_at', '>=', $stime]];
- } else {
- $apply_where = [['personal_uid', '=', auth('web-member')->user()->id]];
- }
- $rst = $this->personalJobsApplyRepository->getJobsApply($apply_where);
- $ids = $rst->pluck('jobs_id');
- if ($ids->isNotEmpty()) {
- $list->whereNotIn('id', $ids->toArray());
- }
- }
- }
- $map_filter = [];
- $map_order = [];
- $wage_min = null;
- $wage_max = null;
- foreach ($where as $k => $v) {
- if ($v[1] != '=') {
- if ($v[0] == 'audit') {
- $list->whereNot('audit', $v[2]);
- } elseif ($v[0] == 'setmeal_id') {
- if ($v[1] == '>') {
- $list->whereRange('setmeal_id', $v[2], null, false);
- } elseif ($v[1] == '<') {
- $list->whereRange('setmeal_id', null, $v[2], false);
- }
- } elseif ($v[0] == 'updated_at') {
- $list->whereRange('updated_at', $v[2], null, false);
- } elseif ($v[0] == 'wage_max') {
- $wage_max = $v[2] ? $v[2] : null;
- } elseif ($v[0] == 'wage_min') {
- $wage_min = $v[2] ? $v[2] : null;
- } else {
- if ($v[1] == 'in') {
- $list->whereIn($v[0], $v[2]);
- } elseif ($v[1] == '>=') {
- $list->whereRange($v[0], $v[2], null);
- } elseif ($v[1] == '<=') {
- $list->whereRange($v[0], null, $v[2]);
- } elseif ($v[1] == '<>') {
- $list->whereNot($v[0], $v[2]);
- } elseif ($v[1] == '>') {
- $list->whereRange($v[0], $v[2], null, false);
- } elseif ($v[1] == '<') {
- $list->whereRange($v[0], null, $v[2], false);
- } elseif ($v[1] == 'like') {
- $list->where($v[0], 'like', $v[2]);
- }
- }
- } else {
- if ($v[0] == 'lng') {
- $map_filter['location']['lon'] = $v[2];
- $map_order['lon'] = $v[2];
- } elseif ($v[0] == 'lat') {
- $map_filter['location']['lat'] = $v[2];
- $map_order['lat'] = $v[2];
- } elseif ($v[0] == 'range') {
- $map_filter['distance'] = $v[2] . 'km';
- } else {
- $list->where($v[0], $v[2]);
- }
- }
- }
- if ($wage_max && $wage_min) {
- $list->where(function (SubBuilder $subBuilder) use ($wage_max, $wage_min) {
- $subBuilder->whereOr(function (SubBuilder $subBuilder) use ($wage_max, $wage_min) {
- $subBuilder->whereRange('wage_min', $wage_min, null)
- ->whereRange('wage_max', null, $wage_max)
- ->whereRange('wage_max', 0, null, false);
- });
- $subBuilder->whereOr('wage', -1);
- });
- } elseif ($wage_min) {
- $list->where(function (SubBuilder $subBuilder) use ($wage_min) {
- $subBuilder->whereOrRange('wage_min', $wage_min, null);
- $subBuilder->whereOr('wage', -1);
- });
- } elseif ($wage_max) {
- $list->where(function (SubBuilder $subBuilder) use ($wage_max) {
- $subBuilder->whereOrRange('wage_max', null, $wage_max);
- $subBuilder->whereOr('wage', -1);
- });
- }
- if ($map_filter) {
- if ($map_filter && !array_has($map_filter, 'distance')) {
- $map_filter['distance'] = 1;
- }
- $list->whereLocation('location', $map_filter['location']['lat'], $map_filter['location']['lon'], $map_filter['distance']);
- }
- if ($map_order) {
- $list->orderBy(['location' => $map_order, 'order' => 'asc', 'unit' => 'km']);
- }
- }
- $list->where(function (SubBuilder $subBuilder) {
- $subBuilder->where('company.user_status', 1);
- });
- //过滤企业审核状态
- $list->where(function (SubBuilder $subBuilder) {
- $subBuilder->where('company.audit', 1);
- });
- if ($order_by) {
- if (is_array($order_by)) {
- foreach ($order_by as $k => $v) {
- $list->orderBy($k, $v);
- }
- } else {
- $list->orderBy($order_by, 'desc');
- }
- } else {
- $list->orderBy('refresh_time', 'desc');
- }
- if ($page) {
- return $list->paginate($limit, 'page', $page);
- } else {
- return $list->paginate($limit);
- }
- } elseif ($model == 'Company') {
- $list = Company::search($search_key);
- if ($callback) {
- $list->query($callback);
- }
- if ($where) {
- foreach ($where as $k => $v) {
- if ($v[1] != '=') {
- if ($v[1] == '>') {
- $list->whereRange($v[0], $v[2], null, false);
- } elseif ($v[1] == '>=') {
- $list->whereRange($v[0], $v[2], null);
- } elseif ($v[1] == '<') {
- $list->whereRange($v[0], null, $v[2], false);
- } elseif ($v[1] == '<=') {
- $list->whereRange($v[0], null, $v[2]);
- } elseif ($v[1] == 'in') {
- $list->whereIn($v[0], $v[2]);
- }
- } else {
- $list->where($v[0], $v[2]);
- }
- }
- }
- $list->where(function (SubBuilder $subBuilder) {
- $subBuilder->where('audit', 1);
- });
- if ($compan_order) {
- if (is_array($order_by)) {
- foreach ($order_by as $k => $v) {
- $list->orderBy($k, $v);
- }
- } else {
- $list->orderBy($order_by, 'desc');
- }
- }
- if ($page) {
- return $list->paginate($limit, 'page', $page);
- } else {
- return $list->paginate($limit);
- }
- } elseif ($model == 'Shuobo') {
- $list = MemberShuobo::search($search_key);
- if ($order_by) {
- if (is_array($order_by)) {
- foreach ($order_by as $k => $v) {
- $list->orderBy($k, $v);
- }
- } else {
- $list->orderBy($order_by, 'desc');
- }
- } else {
- $list->orderBy('refresh_time', 'desc');
- }
- if ($page) {
- return $list->paginate($limit, 'page', $page);
- } else {
- return $list->paginate($limit);
- }
- }
- }
- }
|