<?php
namespace model\import;
use \model;
use \model\check;
use model\pack\packs;
use model\pro\pro;

/**
 * 
 */
class brandPro  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'=>'p_id','caption'=>lg('集团编码'),'must'=>true],
            ['key'=>'p_pb_id','caption'=>lg('商品品牌'),'must'=>true],
            ['key'=>'p_tb_id','caption'=>lg('汽车品牌'),'must'=>true],
            ['key'=>'com_id','caption'=>lg('事业部名称')]
		];

		$this->demoData = [
            'C034000004','NIBD','奔驰','支持多个事业部，用,分隔，例如：广州耐博德汽车零部件有限公司,菲尔科技有限公司'
        ];

		$this->demoremark = '';
        $pbArr = $this->db->select('pro_brand',['pb_cn_name'],['pb_id[!]'=>1]);
        $tgArr = $this->db->select('tag_brand',['tb_cn_name'],['ORDER'=>['tb_seq'=>'ASC','tb_id'=>'ASC']]);
        $comArr = $this->db->select('company',['com_cn_name']);
        $this->extSheet = [
            [
                'sheetName'=>'商品品牌',
                'extData'=>
                    array_merge(
                        [
                            'fields'=>[
                                'pb_cn_name'=>['val'=>'中文名称','width'=>'30'],
                            ]
                        ],
                        $pbArr
                    )
            ],
            [
                'sheetName'=>'汽车品牌',
                'extData'=>
                    array_merge(
                        [
                            'fields'=>[
                                'tb_cn_name'=>['val'=>'中文名称','width'=>'30'],
                            ]
                        ],
                        $tgArr
                    )
            ],
             [
                'sheetName'=>'事业部名称',
                'extData'=>
                    array_merge(
                        [
                           ''
                        ],
                        $comArr
                    )
            ]
        ];
	}
	
	 /**处理导入
     * @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))
		{
			$state = !$this->import->checkRepeat([
			    ['p_id','p_pb_id','p_tb_id','com_id']
		    ]);
		}
		$pro = new pro();
		//数据重复验证
		if($state && !empty($this->import->data))
		{   
            //事业部信息
            $coms = $this->db->select('company',['com_id','com_cn_name']);
            if($coms){
                $comsArr =  array_column($coms,'com_id','com_cn_name');
            }
            //商品品牌
            $brands = $this->db->select('pro_brand',['pb_id','pb_cn_name'],['pb_id[!]'=>1]);
            if($brands){
                $brandsArr =  array_column($brands,'pb_id','pb_cn_name');
            }
            //汽车品牌
            $tbs = $this->db->select('tag_brand',['tb_id','tb_cn_name']);
            if($tbs){
                $tbsArr =  array_column($tbs,'tb_id','tb_cn_name');
            }

            
            $uniqueStrArr = [];
			foreach($this->import->data as &$dv)
			{    
                $dv['p_id'] = $this->db->get('pro','p_id',['p_innum_format'=>formatNum($dv['p_id']),'p_pb_id'=>1]);
                if(!$dv['p_id']){
                    $state = false;
                    $dv['excelInfo']['error'] = '集团编码不存在';
                    $this->import->lineNum = $dv['excelInfo']['line'];
                    $this->import->lastError = $dv['excelInfo']['error'];
                    continue;
                }
                $dv['p_pb_id'] = $brandsArr[$dv['p_pb_id']]?$brandsArr[$dv['p_pb_id']]:0;
                if(!$dv['p_pb_id']){
                    $state = false;
                    $dv['excelInfo']['error'] = '商品品牌不存在';
                    $this->import->lineNum = $dv['excelInfo']['line'];
                    $this->import->lastError = $dv['excelInfo']['error'];
                    continue;
                }
                $dv['p_tb_id'] = $tbsArr[$dv['p_tb_id']]?$tbsArr[$dv['p_tb_id']]:0;
                if(!$dv['p_tb_id']){
                    $state = false;
                    $dv['excelInfo']['error'] = '汽车品牌不存在';
                    $this->import->lineNum = $dv['excelInfo']['line'];
                    $this->import->lastError = $dv['excelInfo']['error'];
                    continue;
                }
                if($dv['com_id']){
                    //判断是否多个事业部
                    $dv['com_id'] = strtr($dv['com_id'],['，'=>',','、'=>',',' '=>',',';'=>',','；'=>',',"\n"=>',',"\r"=>',',"\r\n"=>',']); 
    
                    $comIds = explode(',',$dv['com_id']);
                    $comIdsNew = [];
                    foreach($comIds as $comId){
                        $uniqueKey = [$dv['p_id'],$dv['p_pb_id'],$dv['p_tb_id']];
                        $comId = trim($comId);
                        if($comsArr[$comId]){
                            $uniqueKey[] = $comsArr[$comId];
                            $comIdsNew[] = $comsArr[$comId];
                            $uniqueKey = implode('@',$uniqueKey);
                            if($uniqueStrArr[$uniqueKey]){
                                $state = false;
                                $dv['excelInfo']['error'] = '数据重复,事业部名称:' . $comId;
                                $this->import->lineNum = $dv['excelInfo']['line'];
                                $this->import->lastError = $dv['excelInfo']['error'];
                                continue 2;
                            }else{
                                $uniqueStrArr[$uniqueKey] = 1;
                            }
                        }else{
                            $state = false;
                            $dv['excelInfo']['error'] = '事业部名称不存在,事业部名称:' . $comId;
                            $this->import->lineNum = $dv['excelInfo']['line'];
                            $this->import->lastError = $dv['excelInfo']['error'];
                            continue 2;
                        }
                    }
                    $dv['com_id'] = implode(',',$comIdsNew);
                }else{
                    $dv['com_id'] = '';
                }
                
            
                //检查数据库中是否已存在
                $brandProExt = $this->db->get('pro',['p_id','p_innum'],['p_lnk_p_id'=>$dv['p_id'],'p_pb_id'=>$dv['p_pb_id'],'p_tb_id'=>$dv['p_tb_id']]);
                if($brandProExt){
                    $state = false;
                    $dv['excelInfo']['error'] = '数据库已存在相同的品牌物料,物料编码:' . $brandProExt['p_innum'];
                    $this->import->lineNum = $dv['excelInfo']['line'];
                    $this->import->lastError = $dv['excelInfo']['error'];
                    continue;
                }
			}
			unset($dv);
		}
		//数据合并：p_id+p_pb_id+p_tb_id 一致时合并事业部
		if($state && !empty($this->import->data))
		{
			$grouped = [];
			foreach($this->import->data as $row)
			{
				$key = $row['p_id'].'|'.$row['p_pb_id'].'|'.$row['p_tb_id'];
				if(isset($grouped[$key])){
					$oldCom = $grouped[$key]['com_id'];
					$newCom = $row['com_id'];
					$allCom = array_unique(array_merge(
						explode(',', $oldCom),
						explode(',', $newCom)
					));
					$grouped[$key]['com_id'] = implode(',', array_filter($allCom));
				}else{
					$grouped[$key] = $row;
				}
			}
			$this->import->data = array_values($grouped);
		}
		//入库
		if($state && !empty($this->import->data))
		{       
            $pro = new pro();
           
			foreach($this->import->data as $k=> &$mv)
			{
				if($k > 0 && $k%1000 === 0) errorLog(__CLASS__.$this->title.':'.$k, 'import');
                $res = $pro->createBrandPro($mv['p_id'],$mv['p_pb_id'],$mv['p_tb_id'],$mv['com_id']);
                if($res['code']==-1){
                    $state = false;
                    $mv['excelInfo']['error'] = $res['msg'];
                    $this->import->lineNum = $mv['excelInfo']['line'];
                    $this->import->lastError = $mv['excelInfo']['error'];
                    continue;
                }
			}
            unset($mv);
			
		}
        return $this->import->output(); //生成处理结果
	}
}