123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407 |
- <?php
- namespace app\sys\controller;
- use think\facade\View;
- use think\facade\Request;
- use think\facade\Db;
- use app\model\Employee;
- use app\model\Customer;
- use app\model\Org;
- use app\model\Permission;
- use app\model\camp as campModel;
- use app\model\ExamEmpResult;
- use app\model\TrainDoneLog;
- use app\model\CampPlan;
- use app\model\CampEmployee;
- use app\model\trainClass;
- use app\model\examPaper;
- use app\model\Recruit;
- use wx\miniprogram\Qrcode;
- use app\model\Miniprogram;
- class Recruitment
- {
- /**
- * 人事招聘
- */
- public function index()
- {
- $token = request()->employee;
- $require = Recruit::where([['root_id','=',$token['root_id']]])->column('name','id');
- $w[] = ['root_id','=',$token['root_id']];
- $w[] = ['recruit','in',array_keys($require)];
- $sql = "recruit is not null AND recruit <> '' AND state<>'待审核'";
- $eids = Employee::where($w)->where($sql)->column('id');//通过我的码邀请的人员
- $data['count'] = count($eids);//累计招聘
- //加入新兵训练营的所有人
- $w1[] = ['employee_id','in',$eids];
- $em = CampEmployee::where($w1)->group('employee_id')->field('id,employee_id,state')->select()->toArray();
- $data['pass'] = $data['no_pass'] = 0;//累计通过,不通过
- foreach ($em as $k => $v) {
- $v['state'] == '转正' ? $data['pass']+=1 : $data['no_pass']+=1;
- }
- $data['grawth'] = $data['pass']==0 ? '0%' : round($data['pass']/$data['count']*100,2).'%';//通过率
- //人事招聘人数
- $many = Employee::where($w)->where($sql)->field("count(*) count,recruit")->group('recruit')->order('count desc')->select()->toArray();
- //招聘最多
- $data['many'] = empty($many) ? '暂无' : (Recruit::where('id',$many[0]['recruit'])->value('name') ?: '暂无');
- //通过新兵训练营的所有人
- $emp = CampEmployee::where($w1)->group('employee_id')->field('id,employee_id,state')->select()->toArray();
- $row = [];
- foreach ($emp as $k1 => $v1) {
- if($v1['state']=='转正') $row[] = $v1['employee_id'];
- }
- $field = "recruit,id,IF(id in ('".implode('\',\'', $row)."'),1,0) as pass";
- $emp = Employee::where($sql)->field($field)->select()->toArray();
- $row = [];
- foreach ($emp as $k4 => $v4) {
- isset($row[$v4['recruit']]['all_count']) ? $row[$v4['recruit']]['all_count']+=1 : $row[$v4['recruit']]['all_count']=1;
- if($v4['pass']==1) (isset($row[$v4['recruit']]['pass']) ? $row[$v4['recruit']]['pass']+=1 : $row[$v4['recruit']]['pass']=1);
- }
- $max_grawth = 0;//最高通过率
- $max_recruit = 0;//最高通过率人事
- foreach ($row as $k5 => $v5) {
- if (isset($v5['all_count']) && isset($v5['pass'])) {
- $grawth = round($v5['pass']/$v5['all_count'],4);
- if($grawth>$max_grawth){
- $max_grawth = $grawth;
- $max_recruit = $k5;
- }
- }
- }
- $data['high'] = $max_recruit ? (Recruit::where('id',$max_recruit)->value('name') ?: '暂无') : '暂无';
- View::assign('data',$data);
- return View::fetch();
- }
- /**
- * 人事招聘
- */
- public function list()
- {
- $token = request()->employee;
- $param = Request::only(['page'=>1, 'limit'=>10, 'start_date'=>'','end_date'=>'','keyword'=>'']);
- $w[] = ['root_id','=',$token['root_id']];
- if ($param['start_date']) {
- $w[] = ['addtime','>=',$param['start_date']];
- }
- if ($param['end_date']) {
- $w[] = ['addtime','<=',$param['end_date']];
- }
- if ($param['keyword']) {
- $w[] = ['name','like','%'.$param['keyword'].'%'];
- }
- $root_id = $token['root_id'];
- $list = Recruit::with(['employee'=>function($query) use ($root_id){
- $query->where("recruit is not null AND recruit <> '' AND state <> '待审核' AND root_id=".$root_id)->visible(['id']);
- }])->where($w)->page($param['page'],$param['limit'])->select()->toArray();
- foreach ($list as $k => &$v) {
- $list[$k]['pass'] = $list[$k]['no_pass'] = $list[$k]['count'] = 0;
- if (!empty($v['employee'])) {
- $w1 = [];
- $w1[] = ['employee_id','in',array_column($v['employee'],'id')];
- $w1[] = ['root_id','=',$root_id];
- $employees = CampEmployee::where($w1)->field('state,approve')->group('employee_id')->select();
- // echo $employees;die;
- foreach ($employees as $k2 => &$v2) {
- $v2['state'] == '转正' ? $list[$k]['pass']+=1 : $list[$k]['no_pass']+=1;
- }
- }
- $list[$k]['count']= count($v['employee']);
- $list[$k]['growth'] = $list[$k]['pass']==0 ? '0%' : round($list[$k]['pass']/$list[$k]['count']*100,2).'%';
- }
- $count = Recruit::where($w)->count();
- return json(['code' => 0, 'data' => $list, 'count' => $count, 'msg' => '获取成功']);
- }
- /**
- * 邀请码
- */
- public function add()
- {
- $token = request()->employee;
- $name = input('value','');
- $w[] = ['root_id','=',$token['root_id']];
- $w[] = ['name','=',trim($name)];
- $count = Recruit::where($w)->count();
- if ($count) return json(['code' =>1, 'data' => '人事已存在' ,'msg' => '人事已存在']);
- $save['name'] = trim($name);
- $save['root_id'] = $token['root_id'];
- $id = Recruit::insertGetId($save);
- $accessToken = '';
- // 二维码生成到企业小程序设置中
- $defaultAccesstoken = Miniprogram::where([['root_id', '=',$token['root_id']]])->find();
- $miniQr = new Qrcode();
- // 1)管理员二维码
- $qr = $miniQr->getUnlimited($defaultAccesstoken->accesstoken, [
- 'scene' => 'cgi='.$defaultAccesstoken->notify.'&manager=' . $token['root_id'].'&r='.$id,
- 'page' => 'mycustomer/pages/invite/invite',
- 'width' => '280px',
- 'check_path' => false
- ]);
- $rs = json_decode($qr, true);
- if (!is_null($rs)) {
- trace($rs, 'error');
- return json(['code' => 1, 'msg' => '配置失败,appid,secret不正确或小程序业务域名未配置']);
- }
- $managerQr = 'invite' . DIRECTORY_SEPARATOR . uniqid() . '.jpeg';
- ossContentUpload($managerQr, $qr);
- $save['manager_qr'] = $managerQr;
- // 2)员工二维码
- $qr = $miniQr->getUnlimited($defaultAccesstoken->accesstoken, [
- 'scene' => 'cgi='.$defaultAccesstoken->notify.'&employee=' . $token['root_id'].'&r='.$id,
- 'page' => 'mycustomer/pages/invite/invite',
- 'width' => '280px',
- 'check_path' => false
- ]);
- $rs = json_decode($qr, true);
- if (!is_null($rs)) {
- return json(['code' => 1, 'msg' => '配置失败,appid,secret不正确或小程序业务域名未配置']);
- }
- $employeeQr = 'invite' . DIRECTORY_SEPARATOR . uniqid() . '.jpeg';
- ossContentUpload($employeeQr, $qr);
- $save['employee_qr'] = $employeeQr;
- Recruit::where('id',$id)->update(['employee_qr'=>$employeeQr,'manager_qr'=>$managerQr]);
-
- return json(['code' => 0, 'data' => '添加成功', 'msg' => '添加成功']);
- }
- /**
- * 邀请码
- */
- public function recruitment_qr()
- {
- $token = request()->employee;
- $id = input('name','');
- $info = Recruit::where('id',$id)->find();
- $data['managerQr'] = $info->manager_qr;
- $data['employeeQr'] = $info->employee_qr;
- View::assign('data',$data);
- return View::fetch();
- }
- /**
- * 招聘人员
- */
- public function personal()
- {
- $token = request()->employee;
- $name = input('name','');
- View::assign('name',$name);
- return View::fetch();
- }
- /**
- * 招聘人员liebiao
- */
- public function personal_list()
- {
- $token = request()->employee;
- $name = input('name','');
- $param = Request::only(['page'=>1, 'limit'=>10, 'start_date'=>'','end_date'=>'','keyword'=>'']);
- $w[] = ['root_id','=',$token['root_id']];
- $w[] = ['recruit','=',trim($name)];
- if ($param['keyword']) {
- $w[] = ['name','like','%'.$param['keyword'].'%'];
- }
- if ($param['start_date']) {
- $w[] = ['addtime','>=',$param['start_date']];
- }
- if ($param['end_date']) {
- $w[] = ['addtime','<=',$param['end_date']];
- }
- $list = Employee::with(['org'=>function($query){
- $query->visible(['name'])->bind(['org_name'=>'name']);
- }])->where($w)->field('id,name,org_id,addtime,opt_name')->page($param['page'],$param['limit'])->select()->toArray();
- $counts = Employee::where($w)->count();
- foreach ($list as $k => $v) {
- $list[$k]['name'] = $v['name'] ?: $v['opt_name'];
-
- $w1 = [];
- $w1[] = ['employee_id','=',$v['id']];
- $w1[] = ['root_id','=',$token['root_id']];
- // $w1[] = ['now','=',1];
- $camp = CampEmployee::where($w1)->order('id asc')->field('camp_id,state')->findOrEmpty();
- if (!$camp->isEmpty()) {
- $camp_id = $camp->camp_id;
- $list[$k]['state'] = $camp->state=='转正' ? '转正' : '未通过';
- $pw = [];
- $pw[] = ['root_id','=',$token['root_id']];
- $pw[] = ['camp_id','=',$camp_id];
- $pw[] = ['con_id','>',0];
- $pw[] = ['plan_id','>',0];
- $pw[] = ['del','=',0];
- $plan = CampPlan::where($pw)->order('id asc')->select()->toArray();
- $count = count($plan);//总节数
- $w0 = $w1 = [];//0课程,1试卷
- foreach ($plan as $k3 => $v3) {
- $v3['type']==0 ? $w0[]=$v3['con_id'] : $w1[]=$v3['con_id'];
- }
- $tw = [];
- $tw[] = ['class_id','in',$w0];
- $tw[] = ['root_id','=',$token['root_id']];
- $tw[] = ['from','=',1];
- $tw[] = ['employee_id','=',$v['id']];
- $tw[] = ['done_percent','=',100];
- $train = TrainDoneLog::where($tw)->count();
- $ew = [];
- $ew[] = ['paper_id','in',$w1];
- $ew[] = ['root_id','=',$token['root_id']];
- $ew[] = ['from','=',1];
- $ew[] = ['employee_id','=',$v['id']];
- // $paper = ExamEmpResult::where($ew)->count();
- $paper = ExamEmpResult::with('paper')->where($ew)->select()->toArray();
- $i = 0;
- foreach ($paper as $k6 => $v6) {
- if ($v6['base_score'] <= $v6['final_score']) {
- $i+=1;
- }
- }
- $passed_count = $train+$i;
- $list[$k]['speed'] = $count ? round(($passed_count/$count)*100,2).'%' : '0%';
- }else{
- $list[$k]['speed'] = '';
- $list[$k]['state'] = '未训练';
- }
- }
- return json(['code' => 0, 'data' =>$list, 'count'=>$counts,'msg' => '添加成功']);
- }
- /**
- * 通过人员
- */
- public function pass_personal()
- {
- $token = request()->employee;
- $name = input('name','');
- View::assign('name',$name);
- return View::fetch();
- }
- /**
- * 通过人员列表
- */
- public function pass_personal_list()
- {
- $token = request()->employee;
- $param = Request::only(['page'=>1, 'limit'=>10, 'start_date'=>'','end_date'=>'','keyword'=>'']);
- $w[] = ['root_id','=',$token['root_id']];
- $name = input('name','');
- // $w[] = ['state','=','转正'];
- if ($param['start_date']) {
- $w[] = ['approve_time','>=',$param['start_date']];
- }
- if ($param['end_date']) {
- $w[] = ['approve_time','<=',$param['end_date']];
- }
-
- $camp = CampEmployee::where($w)->group('employee_id')->field('employee_id,state,approve_time')->select()->toArray();
- $ids = [];
- $row = [];
- foreach ($camp as $k => $v) {
- if ($v['state']=='转正') {
- $ids[] = $v['employee_id'];
- $row[$v['employee_id']] = $v['approve_time'];
- }
- }
- if ($param['keyword']) {
- $w1[] = ['name','like','%'.$param['keyword'].'%'];
- }
- $w1[] = ['id','in',$ids];
- $w1[] = ['recruit','=',$name];
- $list = Employee::where($w1)->field('name,id')->page($param['page'],$param['limit'])->select()->toArray();
- foreach ($list as $k => $v) {
- $list[$k]['approve_time'] = $row[$v['id']];
- }
- $count = Employee::where($w1)->count();
- return json(['code' => 0, 'data' =>$list, 'count'=>$count,'msg' => '添加成功']);
- }
- /**
- * 未通过人员
- */
- public function no_pass_personal()
- {
- $token = request()->employee;
- $name = input('name','');
- View::assign('name',$name);
- return View::fetch();
- }
- /**
- * 未通过人员
- */
- public function no_pass_personal_list()
- {
- $token = request()->employee;
- $param = Request::only(['page'=>1, 'limit'=>10, 'start_date'=>'','end_date'=>'','keyword'=>'']);
- $w[] = ['root_id','=',$token['root_id']];
- $name = input('name','');
- $camp = CampEmployee::where($w)->group('employee_id')->field('employee_id,state,approve_time')->select()->toArray();
- $ids = [];
- $row = [];
- foreach ($camp as $k => $v) {
- if ($v['state']!='转正') {
- $ids[] = $v['employee_id'];
- $row[$v['employee_id']] = $v['approve_time'];
- }
- }
- if ($param['keyword']) {
- $w1[] = ['name','like','%'.$param['keyword'].'%'];
- }
- if ($param['start_date']) {
- $w1[] = ['addtime','>=',$param['start_date']];
- }
- if ($param['end_date']) {
- $w1[] = ['addtime','<=',$param['end_date']];
- }
- $w1[] = ['id','in',$ids];
- $w1[] = ['recruit','=',$name];
- $list = Employee::with(['org'=>function($query){
- $query->visible(['name'])->bind(['org_name'=>'name']);
- }])->where($w1)->field('name,id,addtime,org_id')->page($param['page'],$param['limit'])->select()->toArray();
- $count = Employee::where($w1)->count();
- return json(['code' => 0, 'data' =>$list, 'count'=>$count,'msg' => '添加成功']);
- }
- }
|