<?php
namespace model\import;
use \model;
use \model\check;

/**
 * 
 */
class promerge  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'=>'pch_p_id_from','caption'=>lg('合并前GSP型号'),'must'=>true,'formatCell'=>'p_id'],
			 ['key'=>'pch_p_id_to','caption'=>lg('合并后GSP型号'),'must'=>true,'formatCell'=>'p_id'],
		];

		$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);
		
		//数据重复验证
		if($state && !empty($this->import->data))
		{
			$check = new check();
			$proCateRule = $check->checkProRuleCate(array_column($this->import->data, 'pch_p_id_from'), 'B600', 'import');

			foreach($this->import->data as &$dv)
			{
				if(in_array($dv['pch_p_id_from'], $proCateRule['no']))
				{
					$state = false;
					$dv['excelInfo']['error'] = '无此品名权限';
					$this->import->lineNum = $dv['excelInfo']['line'];
					$this->import->lastError = $dv['excelInfo']['error'];
					continue;
				}

				$exist = $check->checkExist('pro_merge', $dv);
				if(!empty($exist))
				{
					$state = false;
					$dv['excelInfo']['error'] = '记录已存在';
					$this->import->lineNum = $dv['excelInfo']['line'];
					$this->import->lastError = $dv['excelInfo']['error'];
					continue;
				}

				$proArr = $this->db->select('p_code', ['pc_p_id', 'pc_outnum', 'pc_cate', 'pc_merge_p_id'], ['pc_p_id'=>[$dv['pch_p_id_from'], $dv['pch_p_id_to']]]);
				$proArr = array_column($proArr, null, 'pc_p_id');
				if(count($proArr) != 2 || $proArr[$dv['pch_p_id_from']]['pc_cate'] != $proArr[$dv['pch_p_id_to']]['pc_cate'])
				{
					$state = false;
					$dv['excelInfo']['error'] = '不同品类禁止合并';
					$this->import->lineNum = $dv['excelInfo']['line'];
					$this->import->lastError = $dv['excelInfo']['error'];
					continue;
				}
					
				if(!empty($proArr[$dv['pch_p_id_to']]['pc_merge_p_id']))	
				{
					$state = false;
					$dv['excelInfo']['error'] = $proArr[$dv['pch_p_id_to']]['pc_outnum'].'不能再次成为合并后GSP型号';
					$this->import->lineNum = $dv['excelInfo']['line'];
					$this->import->lastError = $dv['excelInfo']['error'];
					continue;
				}
			}
		}
		//入库
		if($state && !empty($this->import->data))
		{
			$opuser = getOpuser();
			$datetime = getNowTime();
			foreach($this->import->data as $k=>$mv)
			{
				if($mv['pch_p_id_from'] == $mv['pch_p_id_to']) continue;

				if($k > 0 && $k%1000 === 0) errorLog(__CLASS__.$this->title.':'.$k, 'import');
				$add = [
					'create_time'=>$datetime,
					'update_time'=>$datetime,
					'opuser'=>$opuser
				];
				foreach($mv as $mtk=>$mtv)
				{
					if(stripos($mtk, 'pch_') === 0) 
					{
						$add[$mtk] = $mtv;
					}
				}
				$this->db->insert('pro_merge', $add);
			}
		}
        return $this->import->output(); //生成处理结果
	}
}