<?php
namespace app\adminVue\controller;

use app\BaseController;
use think\facade\Db;
use think\facade\Cache;
use think\facade\Session;
use think\Request;

class Ehs extends TokenCheck
{   
    // 物品出厂记录列表
    public function getOutPlantList(){
        $item = input('get.');
        $obj = Db::name('common_outplant')->where('type',2);
        if($item['status']==1){
            $obj = $obj->whereIn('status',[2,3]);
        }else if($item['status']==4){
            $obj = $obj->where('status',$item['status']);
        }else{
            $obj->where('status','>',0);
        }
        if(isset($item['kw'])&&$item['kw']!=''){
            $owner = Db::name('admin_user')->where('status',1)->where('truename','like','%'.$item['kw'].'%')->column('id');
            $obj = $obj->whereIn('owner',$owner);
        }
        if(isset($item['date'])&&$item['date']!=''){
            $date = explode(',',$item['date']);
            $obj = $obj->where('create_time','between',[strtotime($date[0]),strtotime($date[1])]);
        }
        $data = $obj->order('id desc')->pages($item['limit']);
        $aid_info = Db::name('admin_user')->field('id,truename,dpt')->cates('id');
        $dpt_info = Db::name('admin_org')->where('mid',0)->cache('orgName',600)->column('title','id');
        $materials = Db::name('common_outplant_material')->whereIn('n_id',array_column($data['lists'],'id'))->lists();
        foreach ($materials as $k => $v) {
            if(isset($list[$v['n_id']])==false){
                $list[$v['n_id']] = [];
            }
            array_push($list[$v['n_id']],$v);
        }
        $mid_list = Db::name('member_list')->whereIn('id',array_column($data['lists'],'owner'))->column('ename','id');
        foreach ($data['lists'] as $k => $v) {
            $data['lists'][$k]['checkType'] = $v['checkType']===1?'正常':($v['checkType']===2?'预审批':'紧急审批');
            $data['lists'][$k]['owner'] = $v['ownerType']==1?$mid_list[$v['owner']]:$aid_info[$v['owner']]['truename'];
            $data['lists'][$k]['dpt'] = $v['ownerType']==1?'生产部':$dpt_info[$aid_info[$v['owner']]['dpt']];
            $data['lists'][$k]['create_time'] = date('Y-m-d H:i',$v['create_time']);
            $data['lists'][$k]['out_time'] = date('Y-m-d H:i',$v['out_time']);
            $data['lists'][$k]['back_time'] = $v['back_time']>0?date('Y-m-d H:i',$v['back_time']):'';
            $data['lists'][$k]['check_name'] = $v['on_check']>0?$aid_info[$v['on_check']]['truename']:'';
            $data['lists'][$k]['check_time_show'] = $v['check_time']>0?date('Y-m-d H:i:s',$v['check_time']):'';
            $data['lists'][$k]['list'] = isset($list[$v['id']])?$list[$v['id']]:[];
            $list = [];
            $res['apv'] = $aid_info[$v['apv1']]['truename'];
            $res['time'] = $v['apv1_time']>0?date('Y-m-d H:i:s',$v['apv1_time']):"";
            $res['mark'] = $v['apv1_mark'];
            array_push($list,$res);
            if($v['apv2']>0){
                $res['apv'] = $aid_info[$v['apv2']]['truename'];
                $res['time'] = $v['apv2_time']>0?date('Y-m-d H:i:s',$v['apv2_time']):"";
                $res['mark'] = $v['apv2_mark'];
                array_push($list,$res);
            }
            if($v['apv3']>0){
                $res['apv'] = $aid_info[$v['apv3']]['truename'];
                $res['time'] = $v['apv3_time']>0?date('Y-m-d H:i:s',$v['apv3_time']):"";
                $res['mark'] = $v['apv3_mark'];
                array_push($list,$res);
            }         
            $data['lists'][$k]['apv'] = $list;
        }
        exit($this->lay_table($data));
    }
    // 物品出厂记录导出
    public function outPlantExport(){
        $item = input('get.');
        $data = Db::name('common_outplant')->where('type',2)->where('create_time','between',[strtotime($item['start']),strtotime($item['end'])+86399])->where('status','>',0)->lists();
        $data1 = Db::name('common_outplant_material')->whereIn('n_id',array_column($data,'id'))->lists();
        exit(json_encode(array('code'=>0,'data'=>$data,'data1'=>$data1)));
    }
    // 安全风险反馈记录导出
    public function getNearMissList(){
        $item = input('get.');
        $obj = Db::name('onsite_safe_list')->where('status','>',0);
        if($item['status']<6){
            $obj = $obj->where('status',$item['status']);
        }
        if(isset($item['kw'])&&$item['kw']!=''){
            $owner = Db::name('admin_user')->where('status',1)->where('truename','like','%'.$item['kw'].'%')->column('id');
            $obj = $obj->whereIn('owner',$owner);
        }
        if(isset($item['date'])&&$item['date']!=''){
            $date = explode(',',$item['date']);
            $obj = $obj->where('create_time','between',[strtotime($date[0]),strtotime($date[1])]);
        }
        $data = $obj->order('id desc')->pages($item['limit']);
        $aid_info = Db::name('admin_user')->field('id,truename,dpt')->cates('id');
        $imgs = Db::name('img_list')->where('mid',6)->whereIn('mark',array_column($data['lists'],'id'))->lists();
        foreach ($imgs as $k => $v) {
            if(isset($res[$v['mark']])===false){
                $res[$v['mark']] = [];
            }
            array_push($res[$v['mark']],$v['img']);
        }
        foreach ($data['lists'] as $k => $v) {
            $data['lists'][$k]['owner_name'] = $v['owner']>0?$aid_info[$v['owner']]['truename']:"";
            $data['lists'][$k]['create_date'] = date('Y-m-d',$v['create_date']);
            $data['lists'][$k]['due_date'] = $v['due_date']>0?date('Y-m-d',$v['due_date']):'';
            $data['lists'][$k]['imgs'] = isset($res[$v['id']])?$res[$v['id']]:[];
        }
        exit($this->lay_table($data));
    }
    // 安全风险反馈记录导出
    public function nearMissListExport(){
        $item = input('get.');
        $data = Db::name('onsite_safe_list')->where('status','>',0)->where('create_date','between',[strtotime($item['start']),strtotime($item['end'])+86399])->lists();
        exit(json_encode(array('code'=>0,'data'=>$data)));
    }
    //
    public function nearMissOwnerUpdate(){
        $operator = Db::name('admin_user')->where(['id'=>session('admin')['id'], 'dpt'=>53, 'status'=>1])->find();
        if($operator){
            $id = input('post.id'); $owner = input('post.owner');
            if(!is_scalar($id) || !is_scalar($owner) || !preg_match('/^[1-9][0-9]{0,9}$/', (string)$id) || !preg_match('/^[1-9][0-9]{0,9}$/', (string)$owner)){
                http_response_code(400); exit(json_encode(['code'=>1,'msg'=>'请选择有效风险和责任人！']));
            }
            $prefix = config('database.connections.'.config('database.default').'.prefix');
            if(!preg_match('/^[a-zA-Z0-9_]*$/', $prefix)) throw new \RuntimeException('Invalid table prefix');
            Db::query('SELECT 1'); $connection = Db::connect()->getConnection(); $pdo = $connection->getPdo();
            $pdo->exec('LOCK TABLES `'.$prefix.'onsite_safe_list` WRITE, `'.$prefix.'admin_user` READ');
            try {
                $row = Db::name('onsite_safe_list')->where('id', $id)->find();
                $result = null;
                if(!$row || !((int)$row['status']===1 || ((int)$row['status']===2 && trim((string)$row['action'])===''))) $result = '风险已开始整改或状态已变化，请刷新！';
                elseif(!Db::name('admin_user')->where(['id'=>$owner,'status'=>1])->find()) $result = '请选择启用的责任人！';
                else Db::name('onsite_safe_list')->where('id', $id)->update(['owner'=>(int)$owner,'status'=>2]);
            } finally { $connection->free(); $pdo->exec('UNLOCK TABLES'); }
            if($result){ http_response_code(409); exit(json_encode(['code'=>1,'msg'=>$result])); }
            exit(json_encode(array('code'=>0,'msg'=>'责任人设置成功！')));
        }else{
            http_response_code(440);
            exit(json_encode(array('code'=>1,'msg'=>'您无权设置！')));
        }
    }
    public function tempOutplantUpdate(){
        $data = input('post.');
        $ownerInfo = Db::name('admin_user')->find($data['owner']);
        $data['create_time'] = time();
        $data['dpt'] = $ownerInfo['dpt'];
        $data['type'] = 2;
        $user_type = Db::name('admin_user_mobile')->where('username',$ownerInfo['username'])->value('user_type');
        $data['ownerType'] = $user_type?$user_type:3;
        $data['out_time'] = strtotime($data['out_time']);
        $data['status'] = 4;
        Db::name('common_outplant')->save($data);
        exit(json_encode(array('code'=>0,'msg'=>'操作成功！')));
    }
    
}
