| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254 | <?phpnamespace App\Services\Statistics;use App\Exceptions\ResponseException;use App\Repositories\ResumeRepository;use App\Repositories\PersonalJobsApplyRepository;use App\Repositories\CategoryJobsRepository;use App\Repositories\MemberInfoRepository;use Illuminate\Support\Facades\Cache;class ResumeService{    protected $resumeRepository;    protected $personalJobsApplyRepository;    protected $categoryJobsRepository;    public function __construct(ResumeRepository $resumeRepository, PersonalJobsApplyRepository $personalJobsApplyRepository, CategoryJobsRepository $categoryJobsRepository)    {        $this->resumeRepository = $resumeRepository;        $this->personalJobsApplyRepository = $personalJobsApplyRepository;        $this->categoryJobsRepository = $categoryJobsRepository;    }    public function getValidResumeNum($where)    {        return $this->resumeRepository->getResumesCount($where);    }    public function getResumeNum($where, $member_where = [])    {        $rst = $this->resumeRepository->getResumeNum($where, $member_where);        return $rst;    }    public function getApplyNumGroup($where, $group_by, $subsite_id)    {        $rst = $this->personalJobsApplyRepository->getApplyNumGroup($where, $group_by, $subsite_id);        return $rst->pluck('count(id)', 'DATE(created_at)')->toArray();    }    public function getApplyNum($where, $company_where)    {        return $this->personalJobsApplyRepository->getApplyNum($where, $company_where);    }    public function getApplyNumByGroup($where, $company_where, $fields, $group_by, $order_by = '')    {        return $this->personalJobsApplyRepository->getApplyNumByGroup($where, $company_where, $fields, $group_by, $order_by);    }    public function getApplyNumByCompanyGroup($where, $company_where, $fields, $group_by, $order_by = '', $limit = '')    {        $rst = $this->personalJobsApplyRepository->getApplyNumByCompanyGroup($where, $company_where, $fields, $group_by, $order_by, $limit);        $list = [];        if ($rst->isNotEmpty()) {            foreach ($rst as $k => $v) {                $list[$k]['count'] = $v->count;                $list[$k]['company_id'] = $v->company_id;                $company = $v->companys;                $list[$k]['company_name'] = $company->companyname;            }        }        return $list;    }    public function getResumeNumGroup($where, $group_by)    {        $rst = $this->resumeRepository->getResumeNumGroup($where, $group_by);        return $rst->pluck('count(id)', 'DATE(created_at)')->toArray();    }    //获取职位分类信息    public function getJobsCategoryInfo()    {        $result = Cache::get('jobs_cate_list');        if (null === $result) {            $result = $this->categoryJobsRepository->jobsCateInfoCache();            Cache::put('jobs_cate_list', $result, '86400');        }        return $result;    }    public function dealJobCategory($data)    {        $cates = $this->getJobsCategoryInfo();        if ($data) {            foreach ($data as $k => $v) {                $cate_ids = explode('.', $v['cate']);                if (array_has($cates['id'], $cate_ids[1])) {                    $data[$k]['cate_name'] = $cates['id'][$cate_ids[1]]['name'];                } else {                    $data[$k]['cate_name'] = '';                }            }        }        return $data;    }    public function getAvgWageByEducation($where, $member_where, $fields, $group_by, $order_by = '', $limit = '')    {        $rst = $this->resumeRepository->getAvgWageByGroup($where, $member_where, $fields, $group_by, $order_by, $limit);        return $rst->toArray();    }    public function getResumeNumByClass($where, $member_where, $fields, $group_by, $limit = '', $order_by = '')    {        $rst = $this->resumeRepository->getNumByClassGroup($where, $member_where, $fields, $group_by, $limit = '', $order_by = '');        return $rst->pluck('num', 'class')->toArray();    }    public function getResumeNumByClassGroup($where, $member_where, $fields, $group_by, $order_by = '', $limit = '')    {        $top_arr = [];        $second_arr = [];        $top_name_arr = [];        $second_name_arr = [];        $cates = $this->getJobsCategoryInfo();        $cates = $cates['id'];        $rst = $this->resumeRepository->getResumeNumByClassGroup($where, $member_where, $fields, $group_by, $order_by, $limit);        if ($rst) {            $top_arr = $rst['topClass'];            $second_arr = $rst['secondClass'];        }        if ($top_arr && $cates) {            foreach ($top_arr as $k => $v) {                if ($limit && count($top_name_arr) < $limit) {                    if (array_has($cates, $k)) {                        $top_name_arr[$k] = $cates[$k]['name'];                    } else {                        $top_name_arr[$k] = '';                    }                } else {                    break;                }            }        }        if ($second_arr && $cates) {            foreach ($second_arr as $k => $v) {                if ($limit && count($second_name_arr) < $limit) {                    if (array_has($cates, $k)) {                        $second_name_arr[$k] = $cates[$k]['name'];                    } else {                        $second_name_arr[$k] = '';                    }                } else {                    break;                }            }        }        return ['top_arr'=>$top_arr,'second_arr'=>$second_arr,'top_name_arr'=>$top_name_arr,'second_name_arr'=>$second_name_arr];    }    public function getResumeNumsByGroup($where, $member_where, $fields, $group_by, $order_by)    {        $rst = $this->resumeRepository->getAvgWageByGroup($where, $member_where, $fields, $group_by, $order_by);        return $rst->pluck('num', 'create_month')->toArray();    }    public function getResumeNumsGroup($where, $member_where, $fields, $group_by, $order_by = '')    {        $rst = $this->resumeRepository->getAvgWageByGroup($where, $member_where, $fields, $group_by, $order_by);        return $rst;    }    public function getResumeNumsByEducationGroup($start_time, $end_time, $subsite_id)    {        $resume_where = [            ['r.created_at', '<=', $end_time],            ['r.created_at', '>=', $start_time],        ];        if (config('aix.personal_set.per_set.show_set.resume_display')=='1') {            $resume_where[] = array('r.audit','=','2');        } else {            $resume_where[] = array('r.audit','<>','0');        }        $member_where = array(            ['m.utype','=',2],            ['m.status','=',1]        );        if ($subsite_id != -1) {            $member_where[] = ['m.subsite_id','=',$subsite_id];        }        $resume_fields = 'count(r.id) as num, mu.education';        $where = "r.deleted_at is null and m.deleted_at is null";        $rst = $this->resumeRepository->getResumeNumByEducationGroup($where, $resume_where, $member_where, $resume_fields, 'mu.education', 'mu.education asc');        return $rst->pluck('num', 'education')->toArray();    }    public function getResumeNumsByAgeGroup($subsite_id, $start_time, $end_time, $ages, $age_text)    {        //简历查询条件        $resume_where = [            ['r.created_at', '<=', $end_time],            ['r.created_at', '>=', $start_time],        ];        if (config('aix.personal_set.per_set.show_set.resume_display')=='1') {            $resume_where[] = array('r.audit','=','2');        } else {            $resume_where[] = array('r.audit','<>','0');        }        $member_where = array(            ['m.utype','=',2],            ['m.status','=',1]        );        if ($subsite_id != -1) {            $member_where[] = ['m.subsite_id','=',$subsite_id];        }        $where = "r.deleted_at is null and m.deleted_at is null AND mu.deleted_at is null";        $resume_fields = 'count(r.id) as num, mu.birthday';        $group = '';        $age_data = [];        foreach ($ages as $k => $v) {            $map = [];            $max_birth = date('Y') - $v['min_age'];            $min_birth = 0;            if ($v['max_age']) {                $min_birth =  date('Y') - $v['max_age'];            }            $map[] = ['mu.birthday', '<=', $max_birth];            if ($min_birth && $max_birth) {                $map[] = ['mu.birthday', '>=', $min_birth];            }            $resume_count = $this->resumeRepository->getResumeNumsByAgeGroup($where, $resume_where, $member_where, $map, $resume_fields, $group);            $age_data[$age_text[$k]] = $resume_count;        }        return $age_data;    }    public function getResumeApplyGroup($where, $order_fileds, $apply_group, $apply_order, $limit = '')    {        return $this->personalJobsApplyRepository->getResumeApplyGroup($where, $order_fileds, $apply_group, $apply_order, $limit);    }    public function getResumeBySexGroup($subsite_id, $start_time, $end_time)    {        //简历查询条件        $resume_where = array();        if (config('aix.personal_set.per_set.show_set.resume_display')=='1') {            $resume_where[] = array('r.audit','=','2');        } else {            $resume_where[] = array('r.audit','<>','0');        }        $resume_where[] = ['r.created_at','>=',$start_time];        $resume_where[] = ['r.created_at','<=',$end_time];        $member_where = array(array('m.utype','2',1),);        if ($subsite_id != -1) {            $member_where[] = array('m.subsite_id','=',$subsite_id);        }        $info_where = [];        $field = 'count(r.id) as num, mu.sex,if (mu.sex=1,"男","女") as sex_cn';        $group = 'mu.sex';        $rst = $this->resumeRepository->getResumeNumByGroup($resume_where, $member_where, $info_where, $field, $group);        return $rst;    }}
 |