<?php
namespace app\adminVue\controller;

use app\BaseController;
use think\facade\Db;
use think\facade\Cache;
use think\facade\Session;
use think\Request;
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

class CsUpdate extends TokenCheck
{   
     //总装FTQ查询
     public function faFtqUpdate(){
        $data = input('post.');
        $data['ftq_date'] = strtotime($data['ftq_date']);
        $data['creater'] = session('admin')['id'];
        $un_used = Db::name('quality_base')->where(array('mid'=>1,'mark'=>0))->column('id');
        if($data['issue_poid']>4&&$data['find_poid']!==$data['issue_poid']){
            if(in_array($data['issue_id'],$un_used)){
                $data['signed'] = 0;
            }else{
                $data['signed'] = 1;
            }
        }else{
            $data['signed'] = 0;
        }
        $data['create_time'] = time();
        $data['status'] = 10;
        if($data['id']>0){
            $data = array_diff_key($data,['issue_mid_name'=>0,'find_mid_name'=>0]);
            Db::name('quality_ftq_list')->save($data);
            $id = $data['id'];
        }else{
            $data = array_diff_key($data,['id'=>0,'issue_mid_name'=>0,'find_mid_name'=>0]);
            $id = Db::name('quality_ftq_list')->insertGetId($data);
        }
        exit(json_encode(array('code'=>0,'msg'=>'FTQ记录保存成功！','id'=>$id)));
    }
    //FTQ回复
    public function faFtqFeedback(){
        $data = input('post.');
        $data['update'] = time();
        $data['status'] = 11;
        $data['due_date'] = strtotime($data['due_date']);
        Db::name('quality_ftq_list')->save($data);
        exit(json_encode(array('code'=>0,'msg'=>'FTQ反馈保存成功！')));
    }
    //FTQ设置、QE\QC\target
    public function ftqSetUpdate(){
        $data = input('post.');
        $data = array_intersect_key($data,['id'=>0,'qe'=>0,'qc'=>0,'ftq_target'=>0]);
        Db::name('team_list')->save($data);
        exit(json_encode(array('code'=>0,'msg'=>'设定更新成功！')));
    }
    //FTQ缺陷类型新增
    public function ftqTypeAdd(){
        $data = input('post.');
        $record = Db::name('quality_base')->where('mid', 1)->where(function ($query) {
            $query->where('title', 'C1')
                  ->whereOr('content', '卡丁');
        })->find();
        if($record){
            http_response_code(440);
            exit(json_encode(array('code'=>1,'msg'=>'此代码或描述已存在！')));
        }
        $data['mid'] = 1;
        $data['status'] = 1;
        $data['mark'] = 1;
        Db::name('team_list')->save($data);
        exit(json_encode(array('code'=>0,'msg'=>'添加成功！')));
    }
    //FTQ缺陷状态更新
    public function ftqTypeSet(){
        $data = input('post.');
        $data = array_intersect_key($data,['id'=>0,'mark'=>0,'status'=>0]);
        Db::name('quality_base')->save($data);
        exit(json_encode(array('code'=>0,'msg'=>'修改成功！')));
    }
    //QC巡检新增及更新
    public function qcAuditUpdate(){
        $data = input('post.');
        if($data['id']>0){
            $data = array_intersect_key($data,['id'=>0,'type'=>0,'defect'=>0,'owner'=>0,'issue_desc'=>0]);
            Db::name('quality_onsite_audit_list')->save($data);
            $process['item_id'] = $data['id'];
            $process['mid'] = 1;
            $process['process'] = '更新';
            $process['time'] = time();
            Db::name('common_process_list')->insert($process);
            exit(json_encode(array('code'=>0,'msg'=>'修改成功！','id'=>$process['item_id'])));
        }else{
            unset($data['id']);
            $data['auditor'] = session('admin')['id'];
            $data['audit_date'] = strtotime($data['audit_date']);
            $process['item_id'] = Db::name('quality_onsite_audit_list')->insertGetId($data);
            $process['mid'] = 1;
            $process['process'] = '创建';
            $process['time'] = time();
            Db::name('common_process_list')->insert($process);
            exit(json_encode(array('code'=>0,'msg'=>'新增成功！','id'=>$process['item_id'])));
        }
    }
    //QC巡检反馈
    public function qcAuditFeedback(){
        $data = input('post.');
        $data['due_date'] = strtotime($data['due_date']);
        $data['status'] = 3;
        Db::name('quality_onsite_audit_list')->save($data);
        $process['item_id'] = $data['id'];
        $process['mid'] = 1;
        $process['process'] = '反馈';
        $process['time'] = time();
        Db::name('common_process_list')->insert($process);
        exit(json_encode(array('code'=>0,'msg'=>'反馈完成！')));
    }
    //QC巡检确认
    public function qcAuditFeedbackConfirm(){
        $process['item_id'] = input('post.id');
        $process['mid'] = 1;
        $process['time'] = time();
        if(input('?post.rej')){
            Db::name('quality_onsite_audit_list')->where('id',input('post.id'))->update(['status'=>2,'mark'=>input('post.rej')]);
            $process['process'] = '驳回';
            $process['status'] = 2;
            $process['mark'] = input('post.rej');
        }else{
            Db::name('quality_onsite_audit_list')->where('id',input('post.id'))->update(['status'=>4]);
            $process['process'] = '确认';
        }
        Db::name('common_process_list')->insert($process);
        exit(json_encode(array('code'=>0,'msg'=>input('?post.rej')?'驳回完成！':'确认完成！')));
    }
    //FTQ删除
    public function ftqDelete(){
        Db::name('quality_ftq_list')->where('id',input('post.id'))->update(['status'=>0]);
        exit(json_encode(array('code'=>0,'msg'=>'删除完成！')));
    }
    //FTQ班组信息设置
    public function ftqTeamInfoSet(){
        $data = input('post.');
        $data = array_intersect_key($data, array_flip(['id', 'qe', 'qc', 'ftq_target']));   
        Db::name('team_list')->save($data);
        exit(json_encode(array('code'=>0,'msg'=>'设置成功！')));
    }
    //WIR保存
    public function wirSave(){
        $data = input('post.');
        if(is_array($data['issue_reason'])){
            $data['issue_reason'] = $data['issue_reason'][1];
        }
        if(is_array($data['reportor'])){
            $data['issue_dpt'] = $data['reportor'][0];
            $data['reportor'] = $data['reportor'][2];
        }
        if(is_array($data['line'])){
            $data['project'] = $data['line'][0];
            $data['line'] = $data['line'][1];
        }
        $data['issue_date'] = strtotime($data['issue_date']);
        $data['issue_desc'] = htmlspecialchars($data['issue_desc']);
        if($data['id']>0){
            $data['report_date'] = strtotime($data['report_date']);
            $msg = '编辑成功';

            $data = array_diff_key($data, array_flip(['team', 'aid_name', 'mid_name']));   
        }else{
            $data['owner'] = session('admin')['id'];
            $data['report_date'] = strtotime('today');
            $num = Db::name('quality_wir_list')->where('report_date',$data['report_date'])->count();
            $data['s_id'] = date('y-m-d',$data['report_date']).'-'.($num+1);
            $msg = '新增成功';
            $data = array_diff_key($data, array_flip(['id', 'team', 'aid_name', 'mid_name']));   
            //邮件发送
        }
        
        Db::name('quality_wir_list')->save($data);
        exit(json_encode(array('code'=>0,'msg'=>$msg)));
    }
    //PPI超期备注
    public function ppiDelayMark(){
        Db::name('member_skill')->where('id',input('post.id'))->update(['delay_mark'=>input('post.delay_mark')]);
        exit(json_encode(array('code'=>0,'msg'=>'备注完成！')));
    }
    
    // QC巡检记录删除
    public function qcAuditDelete(){
        Db::name('quality_onsite_audit_list')->where('id',input('post.id'))->update(['status'=>0]);
        exit(json_encode(array('code'=>0,'msg'=>'删除完成！')));
    }
    //QC优秀巡检案例设置
    public function qcAuditGreatUpdate(){
        Db::name('quality_onsite_audit_list')->where('id',input('post.id'))->update(['great'=>input('post.great')]);
        exit(json_encode(array('code'=>0,'msg'=>'设置成功！')));
    }
    //新关键岗位技能上传
    public function newSkillUpload(){
        $data = input('post.eid_list');
        $eids = explode("\n", str_replace(["\r\n", "\r"], "\n", $data));
        $eid = array_filter(array_map('trim', $eids), function($res) {
            return $res !== '';
        });
        $mids = Db::name('member_list')->whereIn('eid',$eid)->where('status',1)->column('id','eid');
        $error = [];
        foreach ($eid as $k => $v) {
            if(isset($mids[$v])==false){
                array_push($error,$v);
            }
        }
        if(count($error)>0){
            http_response_code(440);
            exit(json_encode(array('code'=>1,'msg'=>'以下工号不存在，请确认!<br>'.join(',',$error))));
        }
        $sys = Db::name('member_skill')->where(array('skill_id'=>input('post.skill_id'),'status'=>1))->whereIn('mid',$mids)->lists();
        $mids_key = array_flip($mids);
        if($sys){
            foreach ($sys as $k => $v) {
                array_push($error,$mids_key[$v['mid']]);
            }
            http_response_code(440);
            exit(json_encode(array('code'=>1,'msg'=>'以下工号已有此技能，请确认!<br>'.join(',',$error))));
        }
        $res['eff_date'] = strtotime("+1month",strtotime(input('post.exam_time')));
        $res['skill_id'] = input('post.skill_id');
        $res['level'] = 1;
        $res['skill_type'] = 2;
        $res['audit_type'] = 21;
        $res['status'] = 1;
        $res['mark'] = date('Y-m-d H:i:s').'由'.session('admin')['truename'].'手动添加';
        foreach ($mids as $k => $v) {
            $res['mid'] = $v;
            Db::name('member_skill')->insert($res);
        }
        if($res['skill_id']==125||$res['skill_id']==2123){
            $res['skill_id'] = $res['skill_id']==125?2123:125;
            foreach ($mids as $k => $v) {
                $res['mid'] = $v;
                Db::name('member_skill')->insert($res);
            }
        }
        exit(json_encode(array('code'=>0,'msg'=>'添加成功，一共添加'.count($mids).'人!')));
    }
    //PPI审核结果上传
    public function newScoreUpload(){
        $score = (int)input('post.score');
        $skill_info = Db::name('member_skill')->find(input('post.id'));
        $member_info = Db::name('member_list')->find($skill_info['mid']);
        $tid_info = Db::name('team_list')->find($member_info['tid']);
        $scores = array_intersect_key($skill_info,['mid'=>0,'skill_id'=>0,'audit_type'=>0]);
        $scores['item_type'] = 0;
        $scores['tid'] = $member_info['tid'];
        $scores['aid'] = $tid_info['aid'];
        $scores['poid'] = $member_info['poid'];
        $scores['audit_id'] = $skill_info['id'];
        $scores['eff_date'] = $skill_info['eff_date'];
        $scores['exam_date'] = strtotime(input('post.exam_date'));
        $scores['score'] = $score;
        $scores['answers'] = '';
        $scores['mark'] = input('post.mark');
        $ppi['id'] = $skill_info['id'];
        $ppi['mid'] = $skill_info['mid'];
        $ppi['skill_id'] = $skill_info['skill_id'];
        $ppi['delay_mark'] = null;
        if($score >= 85){
            $scores['status'] = 2;
            switch ($skill_info['audit_type']) {
                case '11':
                case '12':
                case '18':
                case '19':
                    $ppi['eff_date'] = strtotime("+1year",$skill_info['eff_date']);
                    $ppi['audit_type'] = 12;
                break;
                case '21':
                case '27':
                    $ppi['eff_date'] = strtotime("+3month",$skill_info['eff_date']);
                    $ppi['audit_type'] = 22;
                break;
                case '22':
                case '28':
                    $ppi['eff_date'] = strtotime("+6month",$skill_info['eff_date']);
                    $ppi['audit_type'] = 23;
                break;
                case '23':
                case '29':
                    $ppi['eff_date'] = strtotime("+6month",$skill_info['eff_date']);
                    $ppi['audit_type'] = 23;
                break;
            }
            // if($skill_info['audit_type']>20){
            //     $nomal_skill = Db::name('member_skill')->where(array('mid'=>$skill_info['mid'],'skill_id'=>101,'status'=>1))->where('eff_date','<',$ppi['eff_date'])->find();
            //     if($nomal_skill){
            //         Db::name('member_skill')->where('id',$nomal_skill['id'])->update(['trained'=>0,'audit_date'=>null,'delay_mark'=>null,'eff_date'=>strtotime("+1year",$nomal_skill['eff_date'])]);
            //         $info = Db::name('member_list')->where('id',$nomal_skill['mid'])->field('tid,poid')->find();
            //         $aid = Db::name('team_list')->where('id',$info['tid'])->value('aid');
            //         Db::name('quality_ppi_score')->insert(['audit_id'=>$nomal_skill['id'],'item_type'=>0,'mid'=>$nomal_skill['mid'],'aid'=>$aid,'tid'=>$info['tid'],'poid'=>$info['poid'],'skill_id'=>101,'exam_date'=>time(),'audit_type'=>$nomal_skill['audit_type'],'score'=>100,'mark'=>'关键岗位考试合格！']);
            //     }
            // }
        }else{
            $scores['status'] = 3;
            if($skill_info['on_self']==1){
                switch ($skill_info['audit_type']) {
                    case '11':
                    case '12':
                    case '18':
                    case '19':
                        $ppi['audit_type'] = 19;
                        $scores['trainning'] = 1;
                    break;
                    case '21':
                        $ppi['audit_type'] = 27;
                        $scores['trainning'] = 1;
                    break;
                    case '22':
                        $ppi['audit_type'] = 28;
                        $scores['trainning'] = 1;
                    break;
                    case '23':
                        $ppi['audit_type'] = 29;
                    break;
                    case '27':
                    case '28':
                    case '29':
                        $ppi['audit_date'] = strtotime('today');
                        $ppi['status'] = 0;
                        $ppi['mark'] = '关键岗位考核成绩不过，取消该岗位技能,考核日期:'.date('Y-m-d,H:i:s',time()).'！';
                        $skill_name = Db::name('quality_base')->where('id',$skill_info['skill_id'])->value('content');
                        $item['content'] = 'Dear All:<br>员工:'.$member_info['ename'].',工号:'.$member_info['eid'].',审核技能:'.$skill_name.',于'.date('Y-m-d H:i:s',time()).'两次在线考试不合格（考试得分：'.$scores['score'].'），取消该岗位技能！
                            <hr><h3>OMS运营管理系统后台请 <a href="http://10.243.226.7/admin/home/home">点击进入</a> ！</h3>
                        <p>tips: 请使用谷歌浏览器或其他高级浏览器，如未安装，请自行下载安装，也可<a href="http://10.243.222.145/static/download/chrome_installer.exe" download="chrome_installer.exe">点击下载</a>安装谷歌浏览器</p>';
                    break;
                }
            }else{
                $ppi['audit_date'] = strtotime('today');
                $ppi['status'] = 0;
                $ppi['mark'] = '多技能面对面考核成绩不过，取消该岗位技能,考核日期:'.date('Y-m-d,H:i:s',time()).'！';
                $skill_name = Db::name('quality_base')->where('id',$skill_info['skill_id'])->value('content');
                $item['content'] = 'Dear All:<br>员工:'.$member_info['ename'].',工号:'.$member_info['eid'].',审核技能:'.$skill_name.',于'.date('Y-m-d H:i:s',time()).'面试不合格（考试得分：'.$scores['score'].'），取消该岗位技能！
                    <hr><h3>OMS运营管理系统后台请 <a href="http://10.243.226.7/admin/home/home">点击进入</a> ！</h3>
                <p>tips: 请使用谷歌浏览器或其他高级浏览器，如未安装，请自行下载安装，也可<a href="http://10.243.222.145/static/download/chrome_installer.exe" download="chrome_installer.exe">点击下载</a>安装谷歌浏览器</p>';
            }
        }
        $ppi['trained'] = 0;
        $ppi['audit_date'] = null;
        if($skill_info['skill_id']==101){
            $ppi['status'] = 1;
            $item['content'] = null;
        }
        Db::name('member_skill')->save($ppi);
        if($ppi['skill_id']==125||$ppi['skill_id']==2123){
            $ppi['id'] = Db::name('member_skill')->where('skill_id',$ppi['skill_id']==125?2123:125)->where('mid',$ppi['mid'])->where('status',1)->value('id');
            $ppi['skill_id'] = $ppi['skill_id']==125?2123:125;
            Db::name('member_skill')->save($ppi);
        }
        Db::name('quality_ppi_score')->save($scores);
        if(isset($item['content'])==true&&$item['content']!==null){
            $item['title'] = '上岗证技能取消通知';
            $item['to'] = [27,194,300,308,479,436];
            $mail_model = new send();
            $res = $mail_model->sendMail($item);
        }
        exit(json_encode(array('code'=>0,'msg'=>'考核成绩添加完成！')));
    }

    //新增量具记录
    public function measureUpdate(){
        $data = input('post.');
        if($data['id']==""){
            unset($data['id']);
        }
        $data['eff_date'] = strtotime($data['eff_date']);
        $data['owner'] = session('admin')['id'];
        $data['update'] = time();
        Db::name('quality_measure_list')->save($data);
        exit(json_encode(array('code'=>0,'msg'=>isset($data['id'])?'量具编辑完成！':'新增量具成功！')));
    }
    //新增量具记录
    public function measureOwnerUpdate(){
        $record = Db::name('admin_base')->where(array('mid'=>input('post.mid'),'content'=>input('post.content')))->find();
        if($record){
            http_response_code(440);
            exit(json_encode(array('code'=>1,'msg'=>'此操作人员已存在！')));
        }
        Db::name('admin_base')->save(input('post.'));
        exit(json_encode(array('code'=>0,'msg'=>'添加成功')));
    }
    //量具校验更新
    public function measureCheckUpdate(){
        $info = Db::name('quality_measure_list')->find(input('post.id'));
        switch ($info['check_freq']) {
            case 1:
                $eff_date = strtotime("+6month",$info['eff_date']);
                break;
            case 2:
                $eff_date = strtotime("+1year",$info['eff_date']);
                break;
            case 3:
                $eff_date = strtotime("+2year",$info['eff_date']);
                break;
            case 4:
                $eff_date = strtotime("+3year",$info['eff_date']);
                break;
        }
        Db::name('quality_measure_list')->where('id',input('post.id'))->update(['status'=>0,'mark'=>date('Y-m-d H:i:s').'有效期更新']);
        $data = array_diff_key($info,['id'=>0,'status'=>0,'owner'=>0,'update'=>0]);
        $data['eff_date'] = $eff_date;
        $data['owner'] = session('admin')['id'];
        $data['update'] = time();
        $id = Db::name('quality_measure_list')->insertGetId($data);
        if($id){
            exit(json_encode(array('code'=>0,'msg'=>'量具有效期更新成功！')));
        }else{
            exit(json_encode(array('code'=>1,'msg'=>'量具有效期更新失败，请联系管理员！')));
        }
    }
    
}
