<?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 DesignGet extends TokenCheck
{   

    // 盘点地址列表
    public function getInvAddressList(){
        $item = input('get.');
        $obj = Db::name('onsite_inventory');
		if(isset($item['project'])==true&&$item['project'] > 0){
			$obj = $obj->where('project', $item['project']);
		}
        if(isset($item['line'])==true&&$item['line'] > 0){
			$obj = $obj->where('line', $item['line']);
		}
        if(isset($item['rack'])==true&&$item['rack'] !== ""){
			$obj = $obj->where('rack', $item['rack']);
		}
		if(isset($item['kw'])){
            $obj = $obj->where('kanban', 'like', '%'.trim($item['kw']).'%');
		}
		$data = $obj->order('id desc')->pages($item['limit']);
        $team_info = Db::name('team_base')->whereIn('mid',[1,2])->column('title','id');
        $aid_info = Db::name('admin_user')->cache('adminName',600)->column('truename','id');
        foreach ($data['lists'] as $k => $v) {
            $data['lists'][$k]['super'] = $v['super']==1?'是':'';
            $data['lists'][$k]['compose'] = $v['compose']==1?'是':'';
            $data['lists'][$k]['pull_line'] = $v['pull_line']==1?'是':'';
            $data['lists'][$k]['copper'] = $v['copper']==1?'是':'';
            $data['lists'][$k]['wire'] = $v['wire']==1?'是':'';
            $data['lists'][$k]['type'] = $v['type']==2?'称重':($v['type']==1?'计数':($v['type']=='0'?'蓝牙称重':''));
            $data['lists'][$k]['update'] = date('Y-m-d',$v['update']);
            $data['lists'][$k]['project'] = $team_info[$v['project']];
            $data['lists'][$k]['line'] = $team_info[$v['line']];
            $data['lists'][$k]['owner_name'] = $aid_info[$v['owner']];
        }
        exit($this->lay_table($data));
    }
    // 盘点地址导出
    public function addressExport(){
        $item = input('get.');
        $obj = Db::name('onsite_inventory');
		if($item['type']==2&&isset($item['project'])==true&&$item['project'] !== ""){
            $project = explode(',',$item['project']);
			$obj = $obj->whereIn('project', $project);
		}
		if($item['view']==2){
            $obj = $obj->where('owner', session('admin')['id']);
		}
		$data = $obj->lists();
        if(!$data){
            http_response_code(440);
            exit(json_encode(array('code'=>1,'msg'=>'无任何数据记录！')));
        }
        $team_info = Db::name('team_base')->whereIn('mid',[1,2])->column('title','id');
        $aid_info = Db::name('admin_user')->cache('adminName',600)->column('truename','id');
        foreach ($data as $k => $v) {
            $list[$k]['ID'] = $v['id'];
            $list[$k]['项目'] = $team_info[$v['project']];
            $list[$k]['产线'] = $team_info[$v['line']];
            $list[$k]['工装架'] = $v['rack'];
            $list[$k]['位置'] = $v['location'];
            $list[$k]['料号'] = $v['kanban'];
            $list[$k]['单位'] = $v['unit_c'];
            $list[$k]['盘点方式'] = $v['type']==2?'称重':($v['type']==1?'计数':($v['type']=='0'?'蓝牙称重':''));
            $list[$k]['超级看板'] = $v['super']==1?'是':'';
            $list[$k]['组合卡丁'] = $v['compose']==1?'是':'';
            $list[$k]['拉力线'] = $v['pull_line']==1?'是':'';
            $list[$k]['废导线'] = $v['wire']==1?'是':'';
            $list[$k]['废铜片'] = $v['copper']==1?'是':'';
            $list[$k]['上传人'] = $aid_info[$v['owner']];
            $list[$k]['上传日期'] = date('Y-m-d',$v['update']);
        }
        exit(json_encode(array('code'=>0,'data'=>$list)));
    }
    // 盘点地址导出
    public function getInvProjectInfo(){
		$data = Db::name('team_base')->whereIn('mid',[1,2])->order('mark')->cates('id');
        $list = [];
        foreach ($data as $k => $v) {
            if($v['mid']==2&&$v['mark']>0&&$data[$v['mark']]['content']>0){
                $res['项目'] = $data[$v['mark']]['title'];
                $res['产线'] = $v['title'];
                array_push($list,$res);
            }
        }
        exit(json_encode(array('code'=>0,'data'=>$list)));
    }
    // 超级kanban列表
    public function getSuperKanbanList(){
        $item = input('get.');
        $obj = Db::name('onsite_inventory_super');
		if(isset($item['project'])==true&&$item['project'] > 0){
			$obj = $obj->where('project', $item['project']);
		}
		if(isset($item['kw'])){
            $obj = $obj->where('kanban|children', 'like', '%'.trim($item['kw']).'%');
		}
		$data = $obj->order('id desc')->pages($item['limit']);
        $team_info = Db::name('team_base')->where('mid',1)->column('title','id');
        $aid_info = Db::name('admin_user')->cache('adminName',600)->column('truename','id');
        foreach ($data['lists'] as $k => $v) {
            $data['lists'][$k]['project'] = $team_info[$v['project']];
            $data['lists'][$k]['update'] = date('Y-m-d',$v['update']);
            $data['lists'][$k]['owner_name'] = $aid_info[$v['owner']];
        }
        exit($this->lay_table($data));
    }
    // 超级kanban导出
    public function superExport(){
        $item = input('get.');
        $project = explode(',',$item['project']);
        $data = Db::name('onsite_inventory_super')->whereIn('project', $project)->lists();
        if(!$data){
            http_response_code(440);
            exit(json_encode(array('code'=>1,'msg'=>'无任何数据记录！')));
        }
        $team_info = Db::name('team_base')->where('mid',1)->column('title','id');
        $aid_info = Db::name('admin_user')->cache('adminName',600)->column('truename','id');
        foreach ($data as $k => $v) {
            $list[$k]['ID'] = $v['id'];
            $list[$k]['项目'] = $team_info[$v['project']];
            $list[$k]['超级Kanban'] = $v['kanban'];
            $list[$k]['子看板'] = $v['children'];
            $list[$k]['用量'] = $v['num'];
            $list[$k]['单位'] = $v['unit'];
            $list[$k]['上传人'] = $aid_info[$v['owner']];
            $list[$k]['上传日期'] = date('Y-m-d',$v['update']);
        }
        exit(json_encode(array('code'=>0,'data'=>$list)));
    }
    // 盘点记录列表
    public function getInvRecordList(){
        $item = input('get.');
        $obj = Db::name('onsite_inventory_record');
		if(isset($item['project'])&&$item['project'] > 0){
			$obj = $obj->where('project',$item['project']);
		}
		if(isset($item['line'])&&$item['line'] > 0){
			$obj = $obj->where('line',$item['line']);
		}
		if(isset($item['kw'])&&$item['kw'] !== ''){
			$obj = $obj->where('kanban', 'like', '%'.trim($item['kw']).'%');
		}
		if(isset($item['dif'])&&$item['dif'] == 1){
			$obj = $obj->where([['num', 'exp', Db::raw('<>num1')],]);
		}
		$data = $obj->order('id desc')->pages($item['limit']);
		$aid_info = Db::name('member_list')->column('ename','id');
		$info = Db::name('team_base')->where('mid','<',3)->column('title','id');
		$inv_info = Db::name('onsite_inventory')->cates('id');
		foreach ($data['lists'] as $k => $v) {
			$data['lists'][$k]['project'] = $info[$v['project']];
			$data['lists'][$k]['line'] = $info[$v['line']];
			$data['lists'][$k]['rack'] = $inv_info[$v['i_id']]['rack'];
			$data['lists'][$k]['location'] = $inv_info[$v['i_id']]['location'];
			$data['lists'][$k]['unit_c'] = $inv_info[$v['i_id']]['unit_c'];
			$data['lists'][$k]['auditor'] = $aid_info[$v['auditor']];
			$data['lists'][$k]['auditor1'] = $v['auditor1']>0?$aid_info[$v['auditor1']]:'';
			$data['lists'][$k]['submitdate'] =  date('m-d H:i',$v['submitdate']);
			$data['lists'][$k]['submitdate1'] =  $v['submitdate1']>0?date('m-d H:i',$v['submitdate1']):'';
			$data['lists'][$k]['super'] = $inv_info[$v['i_id']]['super'];
			$data['lists'][$k]['compose'] = $inv_info[$v['i_id']]['compose'];
			$data['lists'][$k]['pull_line'] = $inv_info[$v['i_id']]['pull_line'];
			$data['lists'][$k]['copper'] = $inv_info[$v['i_id']]['copper'];
			$data['lists'][$k]['wire'] = $inv_info[$v['i_id']]['wire'];
			$data['lists'][$k]['type'] = $inv_info[$v['i_id']]['type'];
		}
        exit($this->lay_table($data));
    }
    //盘点事件载入
    public function invEventLoad(){
        $data = Db::name('onsite_base')->find(260);
        if($data['mark']===0){
            $data['content'] = [];
        }else{
            $data['content'] = explode('~',$data['content']);
            $data['content'][0] = date('Y-m-d H:i:s',$data['content'][0]);
            $data['content'][1] = date('Y-m-d H:i:s',$data['content'][1]);
        }
        $data['mark'] = (int)$data['mark'];
        exit(json_encode(array('code'=>0,'data'=>$data)));
    }
    // 盘点记录导出
    public function invRecordExport(){
        $item = input('get.');
        $obj = Db::name('onsite_inventory_record');
		if($item['type']==2){
			$obj = $obj->where('recheck', 2);
		}
		$data = $obj->lists();
        if(!$data){
            http_response_code(440);
            exit(json_encode(array('code'=>1,'msg'=>'无任何数据记录！')));
        }
        $team_info = Db::name('team_base')->whereIn('mid',[1,2])->column('title','id');
        $inv_info = Db::name('onsite_inventory')->cates('id');
        if($item['type']==1){
            
            $super = $this->super_detail();
            $result = [];
            foreach ($data as $k => $v) {
                if(isset($inv_info[$v['i_id']]['rack'])){
                    $res['SN'] = $v['i_id'];
                    $res['项目'] = $team_info[$v['project']];
                    $res['产线'] = $team_info[$v['line']];
                    $res['位置'] = $inv_info[$v['i_id']]['rack'].'-'.$inv_info[$v['i_id']]['location'];
                    $res['kanban'] = $v['kanban'];
                    $res['单位'] = $inv_info[$v['i_id']]['unit_c'];
                    $res['盘点1'] = $v['num'];
                    $res['盘点2'] = $v['num1'];
                    if($inv_info[$v['i_id']]['super']==1){
                        $res['看板类型'] = '超级看板';
                    }elseif ( $inv_info[$v['i_id']]['compose']==1) {
                        $res['看板类型'] = '组合卡丁';
                    }elseif ($inv_info[$v['i_id']]['pull_line']==1) {
                        $res['看板类型'] = '拉力线';
                    }elseif ($inv_info[$v['i_id']]['copper']==1) {
                        $res['看板类型'] = '废铜片';
                    }elseif ($inv_info[$v['i_id']]['wire']==1) {
                        $res['看板类型'] = '废导线';
                    }else{
                        $res['看板类型'] = "";
                    }
                    $res['子看板'] = '';
                    $res['盘点类型'] = "";
                    switch ($inv_info[$v['i_id']]['type']) {
                        case '0':
                            $res['盘点类型'] = '蓝牙称重';
                        break;
                        case '1':
                            $res['盘点类型'] = '计数';
                        break;
                        case '2':
                            $res['盘点类型'] = '称重';
                        break;
                        default:
                            $res['盘点类型'] = '未定义';
                        break;
                    }
                    $res['备注'] = $v['mark'];
                    if(($res['看板类型'] == '超级看板'||$res['看板类型'] == '组合卡丁')){
                        if(isset($super[$res['kanban']])&& $res['盘点1'] > 0){
                            $num = $res['盘点1'];
                            $res['盘点1'] = '';
                            $res['子看板'] = '已炸开';
                            array_push($result,$res);
                            $res['位置'] = $res['kanban'];
                            foreach ($super[$res['kanban']] as $ke => $val) {
                                $res['kanban'] = $val['children'];
                                $res['盘点1'] = (int)$num*(int)$val['num'];
                                $res['盘点2'] = '';
                                $res['单位'] = $val['unit'];
                                $res['看板类型'] = '子看板';
                                $res['子看板'] = '';
                                array_push($result,$res);
                            }
                        }else{
                            $res['子看板'] = '系统无子看板或盘点数量为0';
                            array_push($result,$res);
                        }
                    }else{
                        array_push($result,$res);
                    }
                }
            }
        }else{
            foreach ($data as $k => $v) {
                $result[$k]['序号'] = $v['id'];
                $result[$k]['ID'] = $v['i_id'];
                $result[$k]['项目'] = $team_info[$v['project']];
                $result[$k]['产线'] = $team_info[$v['line']];
                $result[$k]['工装架'] = $inv_info[$v['i_id']]['rack'];
                $result[$k]['位置'] = $inv_info[$v['i_id']]['location'];;
                $result[$k]['料号'] = $v['kanban'];
                $result[$k]['单位'] = $inv_info[$v['i_id']]['unit_c'];
                $result[$k]['盘点1'] = $v['num'];
                $result[$k]['盘点2'] = $v['num1'];
                $result[$k]['复盘1'] = $v['check_num1'];
                $result[$k]['复盘2'] = $v['check_num2'];
                $result[$k]['备注'] = $v['check_mark'];
            }
        }
        exit(json_encode(array('code'=>0,'data'=>$result)));
    }
    //查超级看板BOM
    private function super_detail(){
        $data = Db::name('onsite_inventory_super')->field('kanban,children,num,unit')->lists();
        foreach ($data as $k => $v) {
            if(isset($list[$v['kanban']])==false){
                $list[$v['kanban']] = [];
            }
            $res = array_diff_key($v,['id'=>0,'kanban'=>0]);
            array_push($list[$v['kanban']],$res);
        }
        $super = [];
        foreach ($list as $ke => $val) {
            foreach ($val as $k => $v) {
                if(isset($list[$v['children']])){
                    $res = $this->get_kanban($list,$v['children'],$v['num']);
                    if(isset($super[$ke])==false){
                        $super[$ke] = $res;
                    }else{
                        $super[$ke] = array_merge($super[$ke],$res);
                    }
                }else{
                    $super[$ke][$k] = $v;
                }
            }
        }
        return $super;
    }
    //创建构造树
    private function get_kanban($list,$kanban,$num){
        $temp = [];
        foreach ($list[$kanban] as $k => $v) {
            if(isset($list[$v['children']])){
                $res = $this->get_kanban($list,$v['children'],$v['num']);
                $temp = array_merge($temp,$res);
            }else{
                $re['num'] = $v['num']*$num;
                $re['children'] = $v['children'];
                $re['unit'] = $v['unit'];
                array_push($temp,$re);
            }
        }
        return $temp;
    }
}
