<?php
namespace model\import;
use \model;
use \model\check;
use \model\pro\pro;
/**
 * 
 */
class proparam  extends model
{
	public $title = '产品参数'; //固定
	public $import = null;    //固定
	public $rules = null;    //规则
	public $demoData = null;  //样例数据
	public $demoremark = null;  //样例说明
	public $cateParas = null;  //样例说明
	
	public function __construct()
	{
		$req = \mvc::$req;
		parent::__construct(); //执行父类
		$this->import = new \lib\import();
		$this->rules = [
			['key'=>'ppv_oe_id','caption'=>lg('零件主号码'),'must'=>true,'formatCell'=>[\model\oe::class,[],'getPidByNumber',['@'],null]],
		];
		$extData[] = [
			'name'=>['val'=>'参数名','width'=>'20'],
			'value'=>['val'=>'可选参数值','width'=>'30'],
		];
		//限制小类
		$this->cateParas = $this->db->select('part_param', '*', ['ptpa_cate_id'=>$req['cat_id'], 'ptpa_is_edit'=>1]);
		foreach($this->cateParas as $v)
		{	
			if($v['ptpa_pid']>0){
				$sche = $this->db->select('part_param_sche', '*', ['pps_ptpa_id'=>$v['ptpa_pid']]);
				$extData[] = ['name'=>'','value'=>''];
				foreach ($sche as $kk => $vv) {
					$extData[] = ['name'=>$kk==0?$v['cn_name']:'','value'=>$vv['cn_name']];
				}
			}
			$this->rules[] = ['key'=>'ptpa_id_'.$v['ptpa_id'], 'caption'=>$v['cn_name'], 'isparams'=>1, 'ptpa'=>$v];
		}
		//取小类的支持的参数
		$cinfo = $this->db->get('pro_cate',['cat_pos1','cat_pos2','cat_pos3','cat_pos4','cat_pos5'],['id'=>$req['cat_id']]);
		$pro = new pro();
		$allPos = $pro->allPos;
		foreach ($allPos as $pk => $pv) {
			if($cinfo['cat_'.$pk]){
				$extData[] = ['name'=>'','value'=>''];
				foreach (explode(',',$cinfo['cat_'.$pk]) as $k => $v) {
					$extData[] = ['name'=>$k==0?$pv['name']:'','value'=>$v];
				}

				$this->rules[] = ['key'=>'oe_'.$pk, 'caption'=>$pv['name'],'pkey'=>'p_'.$pk, 'ispos'=>1, 'posval'=>explode(',',$cinfo['cat_'.$pk])];
			}
		}
		$this->extSheet = [
            [
                'sheetName'=>'可选参数值',
                'extData'=>$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))
		{
			$rulesK = array_column($this->rules, null, 'key');
			$this->db->Begin();
			foreach($this->import->data as &$dv)
			{	
				$updateArr = [];
				$pposArr = [];
				$p_id = 0;
				if($dv['ppv_oe_id']){
					$p_id = $this->db->get('pro','p_id',['p_oe_id'=>$dv['ppv_oe_id']]);
				}
				foreach($dv as $tkk=>$tkv)
				{
					if(!is_null($tkv) && (is_string($tkv) && trim($tkv) !='NULL'))
					{		
						
						if(!empty($rulesK[$tkk]['isparams']))
						{
							$ptpa = $rulesK[$tkk]['ptpa'];
							if($ptpa['ptpa_pid']>0){

								$ptpa['ptpa_type'] = 'int';
								$searchArr = [];
								foreach(\mvc::$cfg['LANGS'] as $lk=>$lv){
									$searchArr[$lv['field']] = $tkv;
								}
								$tkv = $this->db->get('part_param_sche','pps_id',['pps_ptpa_id'=>$ptpa['ptpa_pid'],'OR'=>$searchArr]);
							}
							$set = [
								'ppv_oe_id' => $dv['ppv_oe_id'],
								'ppv_pc_id' => $ptpa['ptpa_cate_id'],
								'ppv_ptpa_id' => $ptpa['ptpa_id'],
								'ppv_val_int' => $ptpa['ptpa_type'] == 'int' ? $tkv : NULL,
								'ppv_val_double' => $ptpa['ptpa_type'] == 'double' ? $tkv : NULL,
								'ppv_val_string' => in_array($ptpa['ptpa_type'],['string','list','redio','checkbox']) ? $tkv : NULL,
								'ppv_val_smalltxt' => in_array($ptpa['ptpa_type'],['smalltxt','bigtxt']) ? $tkv : NULL,
							];
							$this->db->replace('oe_param_val', $set, ['ppv_oe_id','ppv_ptpa_id']);
							if($p_id)
							{
								$pset = $set;
								$pset['ppv_p_id'] = $p_id;
								unset($pset['ppv_oe_id']);
								$this->db->replace('pro_param_val', $pset, ['ppv_p_id','ppv_ptpa_id']);
							}
							
						}
						//保存位置参数
						if(!empty($rulesK[$tkk]['ispos']))
						{
							$posval = $rulesK[$tkk]['posval'];
							$tkv = explode('/',strtr($tkv,['/'=>'/',';'=>'/','；'=>'/',','=>'/','，'=>'/'])) ;
							$tkv = array_intersect($tkv,$posval);
							$updateArr[$tkk] = implode('/',$tkv);
							$pposArr[$rulesK[$tkk]['pkey']] = implode('/',$tkv);
						}
					}
				}
				if($updateArr)
				{	
					$this->db->update('oe_item',$updateArr,['oe_id'=>$dv['ppv_oe_id']]);
					//更新产品表
					$this->db->update('pro', $pposArr, ['p_id'=>$p_id]);
				}
			}
			$this->db->End();
		}
        return $this->import->output(); //生成处理结果
	}
}