<?php
namespace app\admin\model;
use think\Model;
use think\facade\Db;
use think\facade\Cache;

class MemberList extends Model
{
	public static function member_info($mids){
		$obj = Db::name('member_list');
		$team_info = Db::name('team_list')->cates('id');
		$aid_info = Db::name('admin_user')->cache('adminName',600)->column('truename','id');
		$project_info = Db::name('team_base')->where('mid',1)->column('title','id');
		$list = [];
		if(is_array($mids)){
			$data = $obj->whereIn('id',$mids)->lists();
			$poid_list = array_column($data,'poid');
			$poid_info = Db::name('team_plan_position')->whereIn('id',$poid_list)->column('position','id');
			foreach ($data as $k => $v) {
				$list[$v['id']] = $v;
				$list[$v['id']]['team'] = $team_info[$v['tid']]['team'];
				$list[$v['id']]['project'] = $team_info[$v['tid']]['project'];
				$list[$v['id']]['project_name'] = $project_info[$team_info[$v['tid']]['project']];
				$list[$v['id']]['position'] = $v['poid']>0?$poid_info[$v['poid']]:'';
			}
		}else{
			$list = $obj->find($mids);
			$list['team'] = $team_info[$list['tid']]['team'];
			$list[$v['id']]['project'] = $team_info[$list['tid']]['project'];
			$list[$v['id']]['project_name'] = $project_info[$team_info[$list['tid']]['project']];
			$list[$v['id']]['position'] = $list['poid']>0?Db::name('team_plan_position')->where('id',$list['poid'])->value('position'):'';
		}
		return $list;
	}
	public function member_list($item){
		$obj = Db::name('member_list');
		if(isset($item['kw'])){
			$tid_list = Db::name('team_list')->where('team','like','%'.trim($item['kw']).'%')->field('id')->column('id');
			
			$map1 = [
		        ['status', '=', $item['status']],
		        ['eid', 'like', '%'.trim($item['kw']).'%'],
		    ];
		    $map2 = [
		        ['status', '=', $item['status']],
		        ['ename', 'like', '%'.trim($item['kw']).'%'],
		    ];
			$map3 = [
		        ['status', '=', $item['status']],
		        ['tid', 'in', $tid_list],
		    ];
			$indentity = Db::name('member_interview')->where('identity','like','%'.trim($item['kw']).'%')->column('m_id');
			$map4 = [
		        ['status', '=', $item['status']],
		        ['id', 'in', $indentity],
		    ];
			$obj = $obj->whereOr([$map1, $map2, $map3,$map4]);
		}else{
			$data = $obj->where('status',$item['status']);
		}
		$data = $obj->order('id desc')->pages($item['limit']);
		$project = Db::name('team_base')->where('mid',1)->field('id,title')->cates('id');
		$team = Db::name('team_list')->field('id,team,project')->cates('id');
		$poid_list = array_column($data['lists'],'poid');
		$poid = Db::name('team_plan_position')->field('id,position')->cates('id');
		foreach ($data['lists'] as $k => $v) {
			$data['lists'][$k]['project'] = $project[$team[$v['tid']]['project']]['title'];
			$data['lists'][$k]['team'] = $team[$v['tid']]['team'];
			$data['lists'][$k]['position'] = $v['poid']>0?$poid[$v['poid']]['position']:'';
			$data['lists'][$k]['hire_date'] = $v['hiredate']>0?date('Y-m-d',$data['lists'][$k]['hiredate']):'';
			$data['lists'][$k]['leave_date'] = $v['leavedate']>0?date('Y-m-d',$data['lists'][$k]['leavedate']):'';
		}
		return $data;
	}
	public function MemberInterview()
	{
		return $this->hasOne(MemberInterview::class,'m_id');
	}
	public function team_member_list($tid){
		// print_r($tid);
		$data = Db::name('member_list')->where(array('tid'=>$tid,'status'=>1,'lock'=>0))->lists();
		$tid_info = Db::name('team_list')->field('id,team')->cates('id');
		$poid_list = array_unique(array_column($data, 'poid'));
		$poid_info = Db::name('team_plan_position')->whereIn('id',$poid_list)->cates('id');
		$skill_info = Db::name('quality_base')->where('mid',2)->column('content','id');
		$p_skill = Db::name('team_plan_position_skills')->where('status',1)->whereIn('p_id',$poid_list)->lists();
		foreach ($p_skill as $k => $v) {
            if(isset($skill_need[$v['p_id']])==false){
                $skill_need[$v['p_id']] = [];
				$skill_need_name[$v['p_id']] = '';
            }
            array_push($skill_need[$v['p_id']],$v['skill_id']);
			$skill_need_name[$v['p_id']] = $skill_need_name[$v['p_id']]==''?$skill_info[$v['skill_id']]:($skill_need_name[$v['p_id']].','.$skill_info[$v['skill_id']]);
        }
		$m_skill = Db::name('member_skill')->where('status',1)->where('skill_type',2)->whereIn('mid',array_column($data,'id'))->field('mid,skill_id')->lists();
        foreach ($m_skill as $k => $v) {
            $skill_have[$v['mid']][$v['skill_id']] = 1;
        }
		$self_skill = Db::name('member_skill')->where(array('on_self'=>1,'status'=>1))->whereIn('mid',array_column($data,'id'))->cates('mid');
		$skill_info = Db::name('quality_base')->where('mid',2)->column('content','id');
		$skill_type = Db::name('member_skill')->whereIn('mid',array_column($data,'id'))->where('skill_id',101)->column('audit_type','mid');
		foreach ($data as $k => $v) {
			$data[$k]['team'] = $tid_info[$v['tid']]['team'];
			$data[$k]['position'] = $v['poid']>0?$poid_info[$v['poid']]['position']:'';
			$data[$k]['positiontype'] = $v['poid']>0?$poid_info[$v['poid']]['type']:'';
			$data[$k]['order'] = $v['poid']>0?$poid_info[$v['poid']]['order']:'';
			$data[$k]['skill_need'] = isset($skill_need_name[$v['poid']])?$skill_need_name[$v['poid']]:'';
			if($v['poid']>0&&$poid_info[$v['poid']]['type']!==5){
				$data[$k]['self_skill'] = isset($self_skill[$v['id']]['skill_id'])?$skill_info[$self_skill[$v['id']]['skill_id']]:'<span style="color:red">未设置本岗位</span>';
			}
			if(isset($skill_type[$v['id']])&&$skill_type[$v['id']]>11&&$v['changed']==3){
				Db::name('member_list')->where('id',$v['id'])->update(['changed'=>1]);
				$data[$k]['changed'] = 1;
			}
			$flag = 1;
			if($v['poid']>0&&($poid_info[$v['poid']]['type']==2||$poid_info[$v['poid']]['type']==4)){
                if(isset($skill_need[$v['poid']])){
                    foreach ($skill_need[$v['poid']] as $ke => $val) {
                        if(isset($skill_have[$v['id']][$val])==false){
                            //取消岗位
							$flag = 0;
                        }
                    }
                }else{
                    // 取消岗位
					$flag = 0;
                }
            }
			// if($flag==0){
			// 	$data[$k]['position'] = '';
			// 	$data[$k]['positiontype'] = '';
			// 	$data[$k]['changed'] = '';
			// 	$data[$k]['order'] = '';
			// 	Db::name('member_list')->where('id',$v['id'])->update(['poid'=>0]);
			// }
		}
        array_multisort(array_column($data,'order'),$data);	
		return $data;
	}
	public function member_changed_update($data){   //$data['id','tid','poid'] changed:   1:正常  2：转岗   3：新员工  4：临时岗位  5：未出勤
        $mid_info = Db::name('member_list')->find($data['id']);
		//技能关联
		// if($data['poid']>0){
		// 	$poid_type = Db::name('team_plan_position')->where('id',$data['poid'])->value('type');
		// 	if($poid_type==2||$poid_type==4){
		// 		$poid_skill = Db::name('team_plan_position_skills')->where(array('p_id'=>$data['poid'],'status'=>1))->column('skill_id');
		// 		$m_skills = Db::name('member_skill')->where(array('status'=>1,'skill_type'=>2,'mid'=>$data['id']))->column('skill_id');
		// 		$skill_info = Db::name('quality_base')->where('mid',2)->column('content','id');
		// 		foreach ($poid_skill as $k => $v) {
		// 			if(in_array($v,$m_skills)==false){
		// 				exit(json_encode(array('code'=>3,'msg'=>'员工无关键岗位技能'.$skill_info[$v])));
		// 			}
		// 		}
		// 	}
		// }
        $audit_type = Db::name('member_skill')->where(array('mid'=>$data['id'],'audit_type'=>11))->find();
        if($audit_type){
        	$last = Db::name('team_changed_audit_list')->where('mid',$data['id'])->whereIn('status',[2,3,4])->column('days');
        	if($last){
                $max = max($last);
                if($max<5){
                    $data['changed'] = 3;
                }else{
                    $data['changed'] = 2;
                }
            }else{
                $data['changed'] = 3;
            }
        }else{
        	if($data['poid']>0){
        		if($data['poid']==801||$data['poid']==802||$data['poid']==803){
        			$data['changed'] = 2;
        		}else{
        			$tid_info = Db::name('team_list')->find($data['tid']);
			        $toid_list = Db::name('team_plan_position')->where(array('plan_id'=>$tid_info['plan_id'],'status'=>1))->column('id');
			        if(in_array($data['poid'],$toid_list)){
			            $skill_list = Db::name('member_position_record')->where('mid',$data['id'])->where('number','>',6)->column('poid');
			            if(in_array($data['poid'],$skill_list)){
			                $data['changed'] = 1;
			            }else{
			                $data['changed'] = 2;
			            }
			        }else{
			            $data['changed'] = 2;
			        }
        		}
	        }else{
	        	$data['changed'] = 0;
	        }
        }
        return $data;
	}
}
