<?php
namespace model\import;
use \model;
use \model\check;
use model\pro\pro;

/**
 * 
 */
class supplierPro  extends model
{
	public $title = '供应商产品目录'; //固定
	public $import = null;    //固定
	public $rules = null;    //规则
	public $demoData = null;  //样例数据
	public $demoremark = null;  //样例说明
	
	public function __construct()
	{
		parent::__construct(); //执行父类
		$this->import = new \lib\import();
		$this->rules = [

            ['key'=>'spr_sup_id','caption'=>lg('供应商编码'),'must'=>true],
            ['key'=>'spr_pf_id','caption'=>lg('号码厂商'),'formatCell'=>'pf_id'],
            ['key'=>'spr_number','caption'=>lg('OE号'),'must'=>true],
            ['key'=>'spr_brand','caption'=>lg('品牌')],
            ['key'=>'spr_material','caption'=>lg('材质')],
            ['key'=>'spr_price','caption'=>lg('含税单价')],
            ['key'=>'spr_minbuy','caption'=>lg('起订量')],
            ['key'=>'spr_delivery','caption'=>lg('交期(天)')],
            ['key'=>'spr_price_btime','caption'=>lg('工厂报价时间'),'type'=>'date'],
            ['key'=>'spr_price_etime','caption'=>lg('价格失效时间'),'type'=>'date'],
            ['key'=>'spr_purin_time','caption'=>lg('采购入库时间'),'type'=>'date'],
            ['key'=>'spr_price_status','caption'=>lg('价格状态')],
            ['key'=>'spr_has','caption'=>lg('现货')],
            ['key'=>'spr_hasample','caption'=>lg('提供样品')],
            ['key'=>'spr_from','caption'=>lg('数据来源')],
            ['key'=>'spr_remark','caption'=>lg('备注')],
		];

		$this->demoData = [
		];

		$this->demoremark = '';
	}
	
	 /**处理导入
     * @param array|string $src 数组或者文件名
     * @param isInit 是否是初始化
     * @return 可返回任意值(string|array|bool)，都会到前端
     */
    public function import($src,$isInit=false) //固定
    {
		$state = $this->import->execute($src, $this->rules);
        $data = [];
		//数据重复验证 - 自己
		if($state && !empty($this->import->data))
		{           

            $supplier = $this->db->select('supplier',['sup_id','sup_code'],['sup_code'=>array_column($this->import->data,'spr_sup_id')]);
            $supplierArr = array_column($supplier,'sup_id','sup_code');

            $uniqueArr = [];
            foreach ($this->import->data as &$mv) 
            {   
                $mv['spr_pf_id'] = $mv['spr_pf_id']?:1; 
                //价格状态
                if(isset($mv['spr_price_status']))
				{
					if(in_array($mv['spr_price_status'], ['有效', 'Y'])) $mv['spr_price_status'] = 1;
					if(in_array($mv['spr_price_status'], ['无效', 'N'])) $mv['spr_price_status'] = 0;
					$mv['spr_price_status'] = (int) $mv['spr_price_status'];
				}
                //提供样品
				if(isset($mv['spr_hasample']))
				{
					if(in_array($mv['spr_hasample'], ['是', 'Y'])) $mv['spr_hasample'] = 1;
					if(in_array($mv['spr_hasample'], ['否', 'N'])) $mv['spr_hasample'] = 0;
					$mv['spr_hasample'] = (int) $mv['spr_hasample'];
				}
                //现货
                if(isset($mv['spr_has']))
				{
					if(in_array($mv['spr_has'], ['是', 'Y'])) $mv['spr_has'] = 1;
					if(in_array($mv['spr_has'], ['否', 'N'])) $mv['spr_has'] = 0;
					$mv['spr_has'] = (int) $mv['spr_has'];
				}

                if(isset($supplierArr[$mv['spr_sup_id']])){
                    $mv['spr_sup_id'] = $supplierArr[$mv['spr_sup_id']];
                }else{
                    $state = false;
					$mv['excelInfo']['error'] = '供应商不存在，请核实编码是否正确';
                    $this->import->lineNum = $mv['excelInfo']['line'];
                    $this->import->lastError = $mv['excelInfo']['error'];
                    continue;
                }

                if($mv['spr_number'])
                {
                    $tnums = strtr($mv['spr_number'], ['，'=>',',';'=>',','；'=>',',"\n"=>',']);
                    $tnumsArr = explode(',',$tnums);
                    
                    foreach ($tnumsArr as $kk => $vv) {
                        $temp = $mv;
                        if($vv=='51127498525'){
                            $vvs = $vv;
                        }
                        $temp['spr_number'] = $vv;
                        $temp['spr_format'] = formatNum($vv);
                        $uniKey = $vv. $temp['spr_sup_id'].$temp['spr_pf_id'];
                        if(in_array($uniKey,$uniqueArr)){
                            $state = false;
                            $mv['excelInfo']['error'] = "重复提交的数据{$vv},[ OE号、厂商、供应商 ]";
                            $this->import->lineNum = $mv['excelInfo']['line'];
                            $this->import->lastError = $mv['excelInfo']['error'];
                            continue;

                        }else{
                            $uniqueArr[] = $uniKey;   
                        }

                        $data[] = $temp;
                    }
                }
            }
            unset($mv);
		}

        // $this->import->data = $data;
        // $state = !$this->import->checkRepeat([
        //     ['spr_sup_id','spr_number']
        // ]);
        
        
		//入库
		if($state && !empty($data))
		{
            $check = new check();
            $opuser = getOpuser();
			$datetime = getNowTime();

            $addAnyArr = [];
			$perAdd = 1000;
			$total = count($data);
			$this->db->Begin();

        
			foreach($data as $k=>$mv)
			{
				if($k > 0 && $k%1000 === 0) errorLog(__CLASS__.$this->title.':'.$k, 'import');

				$set = [
                    'spr_opuser'=>$opuser,
					'spr_update_time'=>$datetime
                ];
				foreach($mv as $mtk=>$mtv)
				{ 
					if(stripos($mtk, 'spr_') === 0) 
					{
						$set[$mtk] = $mtv;
					}
				}
                $exist = $check->checkExist('supplier_pro', $mv);
                if(!empty($exist))
                {
                    $this->db->update('supplier_pro', $set, ['spr_sup_id'=>$mv['spr_sup_id'],'spr_pf_id'=>$mv['spr_pf_id'],'spr_format'=>$mv['spr_format']]);
                }
                else
                {
                    $set['spr_create_time'] = $datetime;
                    $addAnyArr[] = $set;
                }
				if(count($addAnyArr) == $perAdd || ($k+1) == $total)
				{
					if(!empty($addAnyArr)) $this->db->insert('supplier_pro', $addAnyArr);
					$addAnyArr = [];
					$logArr = [
						'register'=>$k,
						'class'=>__CLASS__,
						'title'=>$this->title,
						'option'=>'importing'
					];
					errorLog($logArr, 'import');
				}
			}
			$this->db->End();
		}
        return $this->import->output(); //生成处理结果
	}
}