<?php
namespace model\import;
use \model;
use \model\check;
use model\pro\pro;

/**
 * 
 */
class competitorPrice  extends model
{
	public $title = '竞争对手价格'; //固定
	public $import = null;    //固定
	public $rules = null;    //规则
	public $demoData = null;  //样例数据
	public $demoremark = null;  //样例说明
	public $oe_id = null;
	public $oe_cate_id = null;
	public $cor_id = null;
	public $splitval = null;
	
	public function __construct()
	{
		parent::__construct(); //执行父类
		$this->import = new \lib\import();
		$this->rules = [];

		$this->cor_id = \mvc::$req['cor_id'];
		if(empty($this->cor_id) && !empty(\mvc::$req['params'])){
			$params =json_decode(\mvc::$req['params'],true);
			$this->cor_id =$params['cor_id'];
		}
		if(!$this->cor_id){
			$this->rules = [
				['key'=>'cop_cor_id','caption'=>lg('竞争对手'),'must'=>true],
			];
		}
		$this->rules[] = ['key'=>'cop_cop_num','caption'=>lg('竞品型号')];

		$this->oe_id = \mvc::$req['oe_id'];
		if(empty($this->oe_id) && !empty(\mvc::$req['params'])){
			$params =json_decode(\mvc::$req['params'],true);
			$this->oe_id =$params['oe_id'];
		}

		$this->commonData = [
			// ['key'=>'cop_pf_id','caption'=>lg('号码厂商'),'formatCell'=>'pf_id'],
			['key'=>'cop_name','caption'=>lg('名称'),'must'=>false],
            ['key'=>'cop_number','caption'=>lg('号码'),'must'=>$this->oe_id?false:true],
            ['key'=>'cop_price','caption'=>lg('批发价'),'must'=>true],
            ['key'=>'cop_price_time','caption'=>lg('获取时间'),'type'=>'date'],
            ['key'=>'cop_remark','caption'=>lg('备注')],
		];
		
		$temp = ['key'=>'cop_cat_id','caption'=>lg('小类'),'formatCell'=>'cate'];
		if(!$this->oe_id){
			array_unshift($this->commonData,$temp);
		}else{
			$this->oe_cate_id = $this->db->get('oe_item','oe_cate_id',['oe_id'=>$this->oe_id]);
		}
		$this->rules = array_merge($this->rules,$this->commonData);
		$this->splitval = \mvc::$req['splitval'];
		if(empty($this->splitval) && !empty(\mvc::$req['params'])){
			$params =json_decode(\mvc::$req['params'],true);
			$this->splitval =$params['splitval'];
		}
		$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 = [];

        // $state = !$this->import->checkRepeat([
        //     ['cop_cor_id','cop_cat_id','cop_cop_num']
        // ]);

		//数据重复验证 - 自己

		if($state && !empty($this->import->data))
		{           
			if(!$this->cor_id)
			{
				$competitor = $this->db->select('competitor',['cor_id','cor_name'],['cor_name'=>array_column($this->import->data,'cop_cor_id')]);
            	$competitorArr = array_column($competitor,'cor_id','cor_name');
			}
			$unikeysArr = [];
            foreach ($this->import->data as &$mv) 
            {   
				// $mv['cop_cop_num_format'] = formatNum($mv['cop_cop_num']);
                $mv['cop_pf_id'] = $mv['cop_pf_id']?:1; 
				$nums = splitNums($mv['cop_number'], $this->splitval);
				$mv['numidx'] = [];
				foreach ($nums as $key => $val) 
				{	
					$mv['numidx'][] = [
						'con_pf_id'=>1,
						'con_ismain'=>$key==0?'Y':'N',
						'con_number'=>$val,
						'con_formart'=>formatNum($val),
						'con_create_time'=>getNowTime(),
						'con_opuser'=>getOpuser(),
						'con_update_time'=>getNowTime()
					];
				}
				// 竞品价格库的唯一性 
				// 有竞品型号：竞争对手+竞品型号
				// 无竞品型号：竞争对手+主号码的con_formart
				if($mv['cop_cop_num']){
					$unikey = $mv['cop_cor_id'].$mv['cop_cop_num'];
				}else{
					$unikey = $mv['cop_cor_id'].$mv['numidx'][0]['con_formart'];
				}
				if(in_array($unikey, $unikeysArr)){
					$state = false;
					$mv['excelInfo']['error'] = '重复提交的数据,[ '.$unikey.' ]';
					$this->import->lineNum = $mv['excelInfo']['line'];
					$this->import->lastError = $mv['excelInfo']['error'];
					continue;
				}else{
					$unikeysArr[] = $unikey;
				}
				//如果存在oe_id	
				if($this->oe_id){
					$mv['cop_oe_id'] = $this->oe_id;
					$mv['cop_cat_id'] = $this->oe_cate_id;
				}else{
					$numsArr = formatNums(implode(';',$nums));
					if(!$numsArr){
						$state = false;
						$mv['excelInfo']['error'] = '号码格式有误，请检查';
						$this->import->lineNum = $mv['excelInfo']['line'];
						$this->import->lastError = $mv['excelInfo']['error'];
						continue;

					}
					//有分类的情况下匹配
					if($mv['cop_cat_id'])
					{
						$res = $this->db->get('oe_item',['[><]oe_numidx'=>['oe_id'=>'on_oe_id']],['oe_id','oe_cate_id'],['oe_cate_id'=>$mv['cop_cat_id'],'on_pf_id'=>$mv['cop_pf_id'],'on_formart'=>$numsArr]);
						$mv['cop_oe_id'] = $res['oe_id']?:0;
					}else{
						$res = $this->db->select('oe_item',['[><]oe_numidx'=>['oe_id'=>'on_oe_id']],['oe_id','oe_cate_id'],['on_pf_id'=>$mv['cop_pf_id'],'on_formart'=>$numsArr,'GROUP'=>'oe_id']);
						if(count($res)==1){
							$mv['cop_oe_id'] = $res[0]['oe_id']?:0;
							$mv['cop_cat_id'] = $res[0]['oe_cate_id']?:0;
						}						
					}
					// $mv['cop_cat_id'] = $mv['cop_cat_id'];
				}
               
				//竞争对手
				if(!$this->cor_id)
				{
					if(isset($competitorArr[$mv['cop_cor_id']]))
					{
						$mv['cop_cor_id'] = $competitorArr[$mv['cop_cor_id']];
					}
					else
					{
						$state = false;
						$mv['excelInfo']['error'] = '竞争对手不存在，请核实名称是否已录入';
						$this->import->lineNum = $mv['excelInfo']['line'];
						$this->import->lastError = $mv['excelInfo']['error'];
						continue;
					}
				}else{
					$mv['cop_cor_id'] = $this->cor_id;
				}
				$mv['cop_price_time'] = $mv['cop_price_time']?: getNowTime();
                unset($mv['cop_number'],$mv['cop_pf_id']);
            }
            unset($mv);
		}
		//入库
		if($state && !empty($this->import->data))
		{
            $check = new check();
            $opuser = getOpuser();
			$datetime = getNowTime();

            $addAnyArr = [];
			$perAdd = 1000;
			$total = count($this->import->data);
			$this->db->Begin();

        
			foreach($this->import->data as $k=>$mv)
			{
				if($k > 0 && $k%1000 === 0) errorLog(__CLASS__.$this->title.':'.$k, 'import');

				$set = [
                    'cop_opuser'=>$opuser,
					'cop_update_time'=>$datetime
                ];
				foreach($mv as $mtk=>$mtv)
				{ 
					if(stripos($mtk, 'cop_') === 0) 
					{
						$set[$mtk] = $mtv;
					}
				}
			
                // $exist = $check->checkExist('competitor_price', $mv);
				//客户导入号码，先检测工厂号码，如果没有再检测号码表，都没有就当新的处理
				if($set['cop_cop_num']){
					$exist = $this->db->get('competitor_price','cop_id',['cop_cop_num'=>$set['cop_cop_num'],'cop_cor_id'=>$set['cop_cor_id']]);
				}elseif ($mv['numidx'][0]) {
					$exist = $this->db->get('cop_numidx(con)',['[><]competitor_price(cop)'=>['con.con_cop_id'=>'cop_id']],'con_cop_id',['con_formart'=>$mv['numidx'][0]['con_formart'],'cop_cor_id'=>$set['cop_cor_id']]);
				}
				
                if(!empty($exist))
                {
                    $this->db->update('competitor_price', $set, ['cop_id'=>$exist]);
					$arr = $this->db->select('cop_numidx','con_formart',['con_cop_id'=>$exist]);
					$formarts = array_column($mv['numidx'],null,'con_formart');
					
					$delArr = array_diff($arr,array_keys($formarts));
					if($delArr) $this->db->delete('cop_numidx',['con_cop_id'=>$exist,'con_formart'=>$delArr]);
					$newArr = [];
					foreach ($mv['numidx'] as &$nv) 
					{
						$nv['con_cop_id'] = $exist;
						$nv['con_update_time'] = $datetime;
						$nv['con_opuser'] = $opuser;
						if(in_array($nv['con_formart'],$arr))
						{
							$this->db->update('cop_numidx', $nv, ['con_cop_id'=>$exist,'con_formart'=>$nv['con_formart']]);
						}else{
							$newArr[] = $nv;
						}
					}
	
					if($newArr) $this->db->insert('cop_numidx', $newArr);
                }
                else
                {
					//oe_cate_id
                    $set['cop_create_time'] = $datetime;
					$this->db->insert('competitor_price', $set);
					$cop_id = $this->db->id();

					foreach ($mv['numidx'] as &$nv) 
					{
						$nv['con_cop_id'] = $cop_id;
					}
					unset($nv);
					$this->db->insert('cop_numidx', $mv['numidx']);
                }
				
			}
			$this->db->End();
		}
        return $this->import->output(); //生成处理结果
	}
}