<?php
namespace model\import;
use \model;
use \model\check;
use model\pro\pro;

/**
 * 
 */
class prosupplier  extends model
{
	public $title = '商品供应商'; //固定
	public $import = null;    //固定
	public $rules = null;    //规则
	public $demoData = null;  //样例数据
	public $demoremark = null;  //样例说明

	public $pid = null;
	
	public function __construct()
	{
		parent::__construct(); //执行父类
		$this->import = new \lib\import();
		$this->rules = [
            ['key'=>'psu_sup_id','caption'=>lg('供应商编码'),'must'=>true],
			['key'=>'psu_p_id','caption'=>lg('集团号'),'must'=>true],
			['key'=>'psu_pb_id','caption'=>lg('商品品牌'),'must'=>true],	
			['key'=>'psu_pb_p_innum','caption'=>lg('品牌号码'),'must'=>true],
			['key'=>'psu_orgcode','caption'=>lg('关联组织')],
            ['key'=>'psu_zhibao','caption'=>lg('工厂质保期')],
			['key'=>'psu_pack_style','caption'=>lg('包装方式')],
            ['key'=>'psu_gckz','caption'=>lg('是否工厂刻字')],
            ['key'=>'psu_zjm','caption'=>lg('助记码')],
			['key'=>'psu_inbox_count','caption'=>lg('内盒数量')],
			['key'=>'psu_inbox_size','caption'=>lg('内盒尺寸')],
			['key'=>'psu_weight_net','caption'=>lg('产品净重')],
			['key'=>'psu_weight_gross','caption'=>lg('产品毛重')],
			['key'=>'psu_outbox_count','caption'=>lg('外箱数量')],
			['key'=>'psu_outbox_size','caption'=>lg('外箱尺寸')],
			['key'=>'psu_minbuy','caption'=>lg('起订量')],
            ['key'=>'psu_jhjq','caption'=>lg('计划交期(天)')],
            // ['key'=>'psu_hsbm','caption'=>lg('HS编码')]
		];
		
        $supArr = $this->db->select('supplier',['sup_code','sup_name']);
        $this->extSheet = [
            [
                'sheetName'=>'供应商编码',
                'extData'=>array_merge(
                    [
                        'fields'=>[
                            'sup_code'=>['val'=>'供应商编码','width'=>'20'],
                            'sup_name'=>['val'=>'供应商名称','width'=>'30'],
                        ]
                    ],
                    $supArr
                )
            ],
            [
                'sheetName'=>'是否工厂刻字',
                'extData'=>[
                    ['数值'],['是'],['否']
                ]
            ] 
        ];
		$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)){
			$state = !$this->import->checkRepeat([
			    ['woi_oe_format']
		    ]);
		}
		//数据重复验证
		if($state && !empty($this->import->data))
		{
			$check = new check();

			//数据重复验证 - 自己
			if($state && !empty($this->import->data))
			{
				$state = !$this->import->checkRepeat([
					['psu_sup_id','psu_pb_id','psu_p_id']
				]);
			}

			foreach($this->import->data as &$dv)
			{       
                $supplier = $this->db->get('supplier','sup_id',['sup_code'=>$dv['psu_sup_id']]);
                if(empty($supplier)){
                    $state = false;
					$dv['excelInfo']['error'] = '供应商不存在，请核实编码是否正确';
					$this->import->lineNum = $dv['excelInfo']['line'];
					$this->import->lastError = $dv['excelInfo']['error'];
					continue;  
                }else{
                    $dv['psu_sup_id'] = $supplier;
                }

				//商品品牌
				$search = [];
				foreach(\mvc::$cfg['LANGS'] as $lk=>$lv){
					$search['pb_'.$lv['field']] =$dv['psu_pb_id']; 
				}
				$where = [
					"OR" =>$search
				];
				$dv['psu_pb_id'] = $this->db->get('pro_brand','pb_id',$where);
				if(!$dv['psu_pb_id'])
				{
					$state = false;
					$dv['excelInfo']['error'] = '商品品牌不存在';
					$this->import->lineNum = $dv['excelInfo']['line'];
					$this->import->lastError = $dv['excelInfo']['error'];
					continue;
				}
				
				$dv['psu_p_id'] = $this->db->get('pro','p_id',['p_pb_id'=>1,'p_innum_format'=>formatNum($dv['psu_p_id'])]);
				
			
				if(!$dv['psu_p_id']){
					$state = false;
					$dv['excelInfo']['error'] = '无匹配的商品记录';
					$this->import->lineNum = $dv['excelInfo']['line'];
					$this->import->lastError = $dv['excelInfo']['error'];
					continue;
				}
				if($dv['psu_p_id'] && $dv['psu_pb_id'] && $dv['psu_sup_id'])
				{
					$exist = $check->checkExist('pro_supplier', $dv);
					if(!empty($exist))
					{
						$state = false;
						$dv['excelInfo']['error'] = '记录已存在';
						$this->import->lineNum = $dv['excelInfo']['line'];
						$this->import->lastError = $dv['excelInfo']['error'];
						continue;
					}
				}
				

				if(!$dv['psu_gckz']||$dv['psu_gckz']=='否'||$dv['psu_gckz']=='N'){
                    $dv['psu_gckz'] = 0; 
                }else{
                    $dv['psu_gckz'] = 1; 
                }
			}
		}

		
		//入库
		if($state && !empty($this->import->data))
		{	
			$opuser = getOpuser();
			$datetime = getNowTime();

			$this->db->Begin();
			foreach($this->import->data as $k=>$mv)
			{
				if($k > 0 && $k%1000 === 0) errorLog(__CLASS__.$this->title.':'.$k, 'import');
				$add = [
					'psu_opuser'=>$opuser,
					'psu_create_time'=>$datetime,
					'psu_update_time'=>$datetime
				];

				foreach($mv as $mtk=>$mtv)
				{
					if(stripos($mtk, 'psu_') === 0) 
					{
						$add[$mtk] = $mtv;
					}
				}
			
				$this->db->insert('pro_supplier', $add);
			}
			$this->db->End();
		}
        return $this->import->output(); //生成处理结果
	}
}