<?php 
namespace model\import;
use \model;
use \model\check;
use model\pro\pro as ProPro;
use model\pro\synProPic;

/**
 * 
 */
class pro  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->rulesUpdate = [
            ['key'=>'p_id',        'caption'=>lg('商品ID'),  'must'=>true],
            ['key'=>'p_state_main','caption'=>lg('主状态'),'update'=>true],
            ['key'=>'p_material','caption'=>lg('属性'),'formatCell'=>[\model\collocation::class,[],'getOidByName',['@', 16],null],'update'=>true],
            ['key'=>'cat_hsbm','caption'=>lg('HS编码'),'update'=>true],
            ['key'=>'cat_invoice','caption'=>lg('开票名称'),'update'=>true],
            ['key'=>'p_iskit','caption'=>lg('套件'),'update'=>true],
            ['key'=>'p_cm_id','caption'=>lg('所属车型品牌'),'update'=>true],
            ['key'=>'p_standard_name','caption'=>lg('事业部名称'),'update'=>true],
		];
        foreach(\mvc::$cfg['LANGS'] as $lk=>$lv){
            $this->rulesUpdate[]  = ['key'=>'p_'.$lv['field'],        'caption'=>lg($lv['name'].'名称'), 'update'=>true];
        }
        foreach(\mvc::$cfg['LANGS'] as $lk=>$lv){
            $this->rulesUpdate[]  = ['key'=>'p_model_'.$lv['field'],        'caption'=>lg($lv['name'].'车型'), 'update'=>true];
        }
        $this->rulesUpdate[]  = ['key'=>'p_unit','caption'=>lg('基本单位'),'formatCell'=>[\model\collocation::class,[],'getOidByName',['@', 2],null],'update'=>true];
        $this->rulesUpdate[]  = ['key'=>'p_chassis','caption'=>lg('底盘'),'update'=>true];
        $this->rulesUpdate[]  = ['key'=>'p_model_year','caption'=>lg('年限'),'update'=>true];
		
        foreach(\mvc::$cfg['LANGS'] as $lk=>$lv){
            $this->rulesUpdate[]  = ['key'=>'p_des_'.$lv['field'],        'caption'=>lg($lv['name'].'描述'), 'update'=>true];
        }
        $this->rulesUpdate[]  = ['key'=>'p_source_province_id','caption'=>lg('固定货源地-省'),'update'=>true];
        $this->rulesUpdate[]  = ['key'=>'p_source_city_id','caption'=>lg('固定货源地-市'),'update'=>true];
        $this->rulesUpdate[]  = ['key'=>'p_features','caption'=>lg('产品特性'),'update'=>true];
        $this->rulesUpdate[]  = ['key'=>'p_isdevelop','caption'=>lg('内部研发'),'update'=>true];
        $this->rulesUpdate[]  = ['key'=>'p_develop_status','caption'=>lg('开发状态'),'formatCell'=>[\model\collocation::class,[],'getOidByName',['@', 17],null],'update'=>true];
        $this->rulesUpdate[]  = ['key'=>'p_devno','caption'=>lg('研发号'),'update'=>true];
        $this->demoData = [
			
		];

		$this->demoremark = '';
	}
	
	
	/**批量更新
     * @param array|string $src 数组或者文件名
     * @return 可返回任意值(string|array|bool)，都会到前端
     */
    public function importUpdate($src) //固定
    {
		$state = $this->import->execute($src, $this->rulesUpdate);
		//数据重复验证
		if($state && !empty($this->import->data))
		{
            $supplierRes = $this->db->select('supplier',['sup_id','sup_name']);
            $supplierArr = array_column($supplierRes,'sup_id','sup_name');

            $prostatus = array_flip(\mvc::$cfg['PROSTATUS']);
			foreach($this->import->data as &$dv)
			{
				$pro = $this->db->get('pro',["p_id",'p_pb_id'],['p_id'=>$dv['p_id']]);
                $pid = $pro['p_id']??0;
                $dv['pb_id'] = $pro['p_pb_id']??0;
                if(!$pid)
				{
					$state = false;
					$dv['excelInfo']['error'] = '记录不存在';
					$this->import->lineNum = $dv['excelInfo']['line'];
					$this->import->lastError = $dv['excelInfo']['error'];
					continue;
				}
                if($dv['p_state_main']){
                    $dv['p_state_main'] = $prostatus[$dv['p_state_main']]??'00';
                }
                //省市
                if($dv['p_source_province_id']){
                    $dv['p_source_province_id'] = $this->db->get('province_city','pc_id',['pc_name'=>$dv['p_source_province_id']]);
                }

                if($dv['p_source_city_id']){
                    $dv['p_source_city_id'] = $this->db->get('province_city','pc_id',['pc_name'=>$dv['p_source_city_id']]);
                }
              
                //是否套件
                if(in_array($dv['p_iskit'],['是','Y'])){
                    $dv['p_iskit'] = 1;
                }else{
                    $dv['p_iskit'] = 0;
                }
                //是否内部研发
                if(in_array($dv['p_isdevelop'],['是','Y'])){
                    $dv['p_isdevelop'] = 1;
                }else{
                    $dv['p_isdevelop'] = 0;
                }
                //所属车型品牌
                if($dv['p_cm_id']){
           
                    $cmwhere['OR'] = [];
                    foreach(\mvc::$cfg['LANGS'] as $lk=>$lv){
                        $cmwhere['OR']['cm_'.$lv['field']] = $dv['p_cm_id'];
                    }
                    $dv['cm_id'] = $this->db->get('cd_make','cm_id',$cmwhere);
                    if(!$dv['cm_id']){
                        $state = false;
                        $dv['excelInfo']['error'] = '所属车型品牌不存在';
                        $this->import->lineNum = $dv['excelInfo']['line'];
                        $this->import->lastError = $dv['excelInfo']['error'];
                        continue;
                    }
                }
                //研发号
                $dv['devno'] = [];
                if($dv['p_devno']){
                    $devNum = explode("\n",$dv['p_devno']);
                    $i =0;
                    foreach ($devNum as $dval) {
                        $temp = explode(":",$dval);
                        $pde_sup_id = 0;
                        if($temp[0]){
                            $pde_sup_id = $supplierArr[$temp[0]];
                        }
                        $exist = $this->db->get('pro_developno','pde_id',['pde_p_id'=>$pid,'pde_format'=>formatNum($temp[1]),'pde_sup_id'=>$pde_sup_id]);
                        $dv['devno'][] = [
                            'pde_id'=>$exist?$exist:--$i,
                            'pde_sup_id'=>$pde_sup_id,
                            'pde_number'=>$temp[1],
                            'pde_format'=>formatNum($temp[1]),
                            'pde_p_id'=>$pid
                        ];
                    }
                }
                unset($dv['p_devno']);
			}
		}

		//入库
		if($state && !empty($this->import->data))
		{
			$opuser = getOpuser();
			$datetime = getNowTime();
            $fgioArr = [];
			$this->db->Begin();
            $pro = new ProPro();
			foreach($this->import->data as $k=>$mv)
			{   
                if($mv['pb_id']==1)
                {
                    $fgioArr[] = $mv['p_id'];
                }  
               
				$set = [
					'p_opuser'=>$opuser,	
					'p_update_time'=>$datetime,
				];
				foreach($mv as $kk=>$vv){
					if(stripos($kk, 'p_') === 0){
						$set[$kk] = $vv;
					}
				}
                $pid = $set['p_id'];
                unset($set['p_id']);
                $this->db->update('pro', $set, ['p_id'=>$pid]);
                $pro->saveDevelopNo($pid,$mv['devno']);
			}
            //推送到frey
            if($fgioArr){
                $synProPic = new synProPic();
                $synProPic->pdmProductSave($fgioArr);
            }
			$this->db->End();
            
		}
        return $this->import->output(); //生成处理结果
	}
	
	
}