<?php
namespace App\Repositories;
use App\Models\Company;
use App\Models\PersonalJobsApply;
use App\Models\Member;
use App\Models\Category;
use App\Models\Jobs;
use Prettus\Repository\Eloquent\BaseRepository;
use Prettus\Repository\Criteria\RequestCriteria;
use Illuminate\Support\Facades\DB;
/**
* Class MemberRepositoryEloquent.
*
* @package namespace App\Repositories;
*/
class PersonalJobsApplyRepository extends BaseRepository
{
/**
* Specify Model class name
*
* @return string
*/
public function model()
{
return PersonalJobsApply::class;
}
/**
* Boot up the repository, pushing criteria
*/
public function boot()
{
$this->pushCriteria(app(RequestCriteria::class));
}
/**
* 获取已申请职位数。
* @param $resume_id
* @param $personal_uid
* @return mixed
*/
public function getApplyJobs($personal_uid, $where)
{
return $this->model->with(['resumes','jobs'=>function($query) use ($where) {
$query->whereIn('audit', $where)->where('display', 1)->where('valid', 1);
}])->where(['personal_uid'=>$personal_uid])->whereHas('resumes')->whereHas('jobs')->count();
}
public function getApplyJobsDef($resume_id, $where)
{
return $this->model->with(['resumes','jobs'=>function($query) use ($where) {
$query->whereIn('audit', $where)->where('display', 1)->where('valid', 1);
}])->where(['resume_id'=>$resume_id])->whereHas('resumes')->whereHas('jobs')->count();
}
public function getApplyResume($jobs_id)
{
return $this->model->where(['jobs_id'=>$jobs_id,'is_reply'=>0])->count();
}
/**
* @param $map
* @param $valid 停招职位
* @param $apply_time 投递时间
* @param $page
* @return mixed
*/
public function getResume($where, $page)
{
return $this->model->with('jobs')->with('resumes')->where($where)->orderByRaw("FIELD(is_reply,0,1,3,2,4)")->orderBy('id', 'desc')->orderBy('created_at', 'desc')->paginate($page);
}
public function companyLabelResume($id, $data)
{
return $this->update($data, $id);
}
/**
* 近两周收到的简历
* @return mixed
*/
public function twoWeeksTotal($id)
{
return $this->model->where('created_at', '>=', date('Y-m-d', time()-86400*14))->where('company_id', '=', $id)->count();
}
/**
* 近两周处理的简历
* @return mixed
*/
public function twoWeeksReplyTotal($id)
{
$where = [
['created_at','>=',date('Y-m-d', time() - 86400*14)],
['is_reply', '>', 0],
['personal_look','=',2],
];
return $this->model->where($where)->where('company_id', '=', $id)->count();
}
/**
* 删除简历申请
* @param $id
* @return mixed
* @param $company_id
*/
public function delJobsApply($id,$company_id)
{
return $this->model->whereIn('id', $id)->where("company_id",$company_id)->delete();
}
/**
* 查询单个简历申请
* @param $where
* @return mixed
*/
public function getOne($where)
{
return $this->model->where($where)->orderBy('id', 'desc')->first();
}
public function getJobsApply($where)
{
return $this->model->where($where)->orderBy('id', 'desc')->get();
}
/**
* 获取简历ID
* @param $id
* @return mixed
*/
public function getResumeId($id)
{
return $this->model->whereIn('id', $id)->select(['resume_id'])->get()->toArray();
}
/**
* 检测是否申请过职位
*/
public function checkJobsApply($resume_id, $company_id, $jobs_id = false)
{
$where['resume_id'] = $resume_id;
$where['company_id'] = $company_id;
$jobs_id && $where['jobs_id'] = $jobs_id;
if (!$this->model->where($where)->first()) {
return false;
}
return true;
}
/**
* 获取一条职位申请记录
*/
public function findJobsApply($resume_id, $company_id, $jobs_id = false,$id=0)
{
$where['resume_id'] = $resume_id;
$where['company_id'] = $company_id;
if (!empty($id)){
$where['id']=$id;
}
$jobs_id && $where['jobs_id'] = $jobs_id;
return $this->model->where($where)->first();
}
/**
* 修改投递状态和查看状态
* @param $where
* @return mixed
*/
public function updateApply($where)
{
return $this->model->where($where)->update(['is_reply'=>3,'personal_look'=>2]);
}
/**简历回收站
* @param $uid
* @param $page
* @return mixed
*/
public function recycle($uid, $page)
{
$where = [
'company_id'=>$uid,
];
return $this->model->onlyTrashed()->where($where)->paginate($page);
}
/**删除收到的简历
* @param $id
* @return mixed
*/
public function destroyJobsApply($id)
{
return $this->model->whereIn('id', $id)->forceDelete();
}
/**清空回收站
* @param $company_id
* @return mixed
*/
public function clearRecycle($company_id)
{
return $this->model->where('company_id', $company_id)->forceDelete();
}
public function applyJobs($where, $jobs_id = array())
{
if ($jobs_id) {
return $this->model->where($where)->whereIn('jobs_id', $jobs_id)->orderBy('created_at', 'desc')->get();
} else {
return $this->model->where($where)->orderBy('created_at', 'desc')->get();
}
}
public function checkApplyJobs($where, $jobs_id = array())
{
if ($jobs_id) {
return $this->model->where($where)->whereIn('jobs_id', $jobs_id)->get();
} else {
return $this->model->where($where)->get();
}
}
//获取其它字段包含whereIn条件的字段的申请记录
public function getApplies($where, $whereIn = array())
{
$list = array();
if ($whereIn) {
$rst = $this->model->where($where)->whereIn(key($whereIn), $whereIn[key($whereIn)])->get();
} else {
$rst = $this->model->where($where)->get();
}
if ($rst->toArray()) {
foreach ($rst as $k => $v) {
$list[$v->resume_id] = $v;
}
}
return $list;
}
public function addData($data)
{
return $this->model->create($data);
}
public function setApply($where, $set)
{
return $this->model->where($where)->update($set);
}
/**投递简历数
* @param $where
* @return mixed
*/
public function resumesCount($where)
{
return $this->model->where($where)->count();
}
public function getStateArr()
{
return $this->model->getStateArr();
}
public function getResumeApplyGroup($where, $fileds = 'count(p.id) as num,j.category,c.demand', $group_by = 'j.category', $order_by = 'count(p.jobs_id) DESC', $limit = '')
{
$rst = DB::table(PersonalJobsApply::getTableName().' as p')->select(DB::raw($fileds))
->leftjoin(Member::getTableName().' as m', 'm.id', '=', 'p.personal_uid')
//->leftjoin(Jobs::getTableName().' as j', 'j.id', '=', 'p.jobs_id')
->leftjoin(Company::getTableName().' as cp', 'cp.id', '=', 'p.company_id')
->leftjoin(Category::getTableName().' as c', 'c.id', '=', 'cp.trade')
->where($where)
->groupBy($group_by)
->orderByRaw($order_by);
if ($limit) {
$rst->offset(0)->limit($limit);
}
return $rst->get();
}
public function getApplyNumGroup($where, $group_by, $subsite_id)
{
$rst = $this->model->where($where)->select(DB::raw('count(id),DATE(created_at)'))->when($subsite_id!=-1, function($query) use($subsite_id) {
$query->whereHas('members', function ($query) use ($subsite_id) {
$query->where(['subsite_id'=>$subsite_id]);
});
});
if ($group_by) {
$rst->groupBy($group_by);
}
return $rst->get();
}
public function getApplyNum($where, $company_where)
{
return $this->model
->where($where)
->when($company_where, function ($query) use ($company_where) {
$query->whereHas('companys', function ($query) use ($company_where) {
$query->where($company_where);
});
})->count();
}
public function getApplyNumByGroup($where, $company_where, $fields, $group_by, $order_by = '')
{
$rst = $this->model->select(DB::raw($fields))->where($where)
->when($company_where, function ($query) use ($company_where) {
$query->whereHas('companys', function ($query) use ($company_where) {
$query->where($company_where);
});
});
if ($group_by) {
foreach ($group_by as $k => $v) {
$rst->groupBy($v);
}
}
if ($order_by) {
$rst->orderByRaw($order_by);
}
return $rst->get();
}
public function getApplyNumByCompanyGroup($where, $company_where, $fields, $group_by, $order_by = '', $limit = '')
{
$rst = $this->model->with('companys')->select(DB::raw($fields))->where($where)
->when($company_where, function ($query) use ($company_where) {
$query->whereHas('companys', function ($query) use ($company_where) {
$query->where($company_where);
});
});
if ($group_by) {
foreach ($group_by as $k => $v) {
$rst->groupBy($v);
}
}
if ($order_by) {
$rst->orderByRaw($order_by);
}
if ($limit) {
$rst->offset(0)->limit($limit);
}
return $rst->get();
}
public function getResumeNumBySexGroup($resume_where, $member_where)
{
$rst = $this->model->with(['memberInfos'])->where($resume_where)->when($member_where, function($query) use($member_where) {
$query->whereHas('members', function ($query) use ($member_where) {
$query->where($member_where);
});
})->get();
return $rst;
}
public function getPersonalJobByID($id){
return $this->model->where("id",$id)->first();
}
public function getResumeApplyWithDeleted($where, $member_where)
{
$rst = $this->model
//->withTrashed()
->where($where)
->when($member_where, function ($query) use ($member_where) {
$query->whereHas('members', function ($query) use ($member_where) {
//$query->withTrashed()->where($member_where);
$query->where($member_where);
});
})->get();
return $rst;
}
public function getPluck($where,$column)
{
return $this->model->where($where)->pluck($column);
}
}