<?php
/*
 [
    'key'=>'rule1',                             //键名
    'caption'=>'编码规则',                      //字段名
    'must'=> true,                              //是否必须,默认false
    'mustCols'=> ['ruleA','ruleB']              //当此列存在时，必须有的其他列 ，默认空
    'minlen'=>0,                                //最小长度 默认0不判断
    'maxlen'=>50,                               //最大长度 默认0不判断
    'type'=>'number',                           //类型 number,string 默认 string
    //自定义检测
    'checkfunction'=>function($arr, $k, $v, $obj){
        $obj->lastError = '[line:'.$obj->lineNum.'] ['.$obj->rules[$k]['caption'].'] 自定义检测, 当前值为[ '.$v.' ]';
        return false;
    }
     //格式化单元格的值 [
        类, 
        类的创建参数, 默认[]
        方法, 
        参数,  ['@innum','@outnum',123,true] @表示使用导入数据中的列中的值 ,'@'表示自己 
        如果结果是数组指定返回哪个键 默认null
     ]
    'formatCell'=> [\model\collocation::class,'getRowByKey',['@'],null],   或者 config/import.php 中的配置
],
 */
 
namespace model\import;
use \model;
use model\oeNumidx as ModelOeNumidx;
use \model\tags;
use \model\pro\numidx as pronumidx;
use model\pro\pro;

/**
 * 
 */
class oeNumidx  extends model
{
	 /**
     * 标题 (用于消息提醒)
     */
	public $title = 'OE参考号'; //固定
	public $import = null;    //固定
	public $rules = null;    //规则
	public $demoData = null;  //样例数据
	public $demoremark = null;  //样例说明
	public $oe_id = null;
	
	public function __construct()
	{
		parent::__construct(); //执行父类
		$this->import = new \lib\import();
		
		$this->rules = [
			['key'=>'on_pf_id',         'caption'=>lg('号码厂商'),'must'=>true,'formatCell'=>'pf_id'],
			['key'=>'on_number',        'caption'=>lg('号码'),'must'=>true,'minlen'=>3,'maxlen'=>50],
			['key'=>'on_tag_brand',         'caption'=>lg('OE汽车品牌')],
			['key'=>'on_spuser',         'caption'=>lg('提供人')]
		];

		$this->rulesUpdate = [
			['key'=>'on_id',          'caption'=>lg('ID'),'must'=>true],
			['key'=>'on_pf_id',         'caption'=>lg('号码厂商'),'must'=>true,'formatCell'=>'pf_id'],
			['key'=>'on_number',        'caption'=>lg('号码'),'must'=>true,'minlen'=>3,'maxlen'=>50],
			['key'=>'on_tag_brand',         'caption'=>lg('OE汽车品牌')],
	   ];

	   $rules2 = [['key'=>'on_oe_id',          'caption'=>lg('OE'),'must'=>true,'formatCell'=>[\model\oe::class,[],'getPidByNumber',['@'],null]],];


	   $this->oe_id = \mvc::$req['oe_id'];
	   if(empty($this->oe_id) && !empty(\mvc::$req['params'])){
		   $params =json_decode(\mvc::$req['params'],true);
		   $this->oe_id =$params['oe_id'];
	   }
		if(!$this->oe_id){
			// $this->rulesUpdate = array_merge($this->rulesUpdate,$rules2);
			$this->rules = array_merge($rules2,$this->rules);
		}
			
	   $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 \model\check();
			// $proCateRule = $check->checkProRuleCate(array_column($this->import->data, 'on_oe_id'), 'E100', 'import');
			$userArr = $this->db->select('adm_user',['au_id','au_name']);
			$userArr = array_column($userArr,'au_id','au_name');
			$ModelOeNumidx = new ModelOeNumidx();
			foreach($this->import->data as &$dv)
			{	
				if($this->oe_id){
					$dv['on_oe_id'] = $this->oe_id;	
				}
				$dv['on_formart'] = formatNum($dv['on_number']);
				$exists = $ModelOeNumidx->checkExistTemp($dv);
				if(!empty($exists))
				{
					$state = false;
					$dv['excelInfo']['error'] = $exists['msg'];
					$this->import->lineNum = $dv['excelInfo']['line'];
					$this->import->lastError = $dv['excelInfo']['error'];
					continue;
				}
				if(!empty($dv['on_spuser'])){
					if(empty($userArr[$dv['on_spuser']])){
						$state = false;
						$dv['excelInfo']['error'] = '提供人不存在';
						$this->import->lineNum = $dv['excelInfo']['line'];
						$this->import->lastError = $dv['excelInfo']['error'];
						continue;
					}else{
						$dv['on_spuser'] = $userArr[$dv['on_spuser']];	
					}
					
				}
			
				//查oe_tag_brand
				$dv['on_tag_brand_ids'] = [];
				$str = strtr($dv['on_tag_brand'],['，'=>',',';'=>',','；'=>',',"\n"=>',']);
				$strArr = explode(',',$str);
				$existsArr = $this->db->select('tag_brand',['tb_cn_name','tb_id'],['tb_cn_name'=>$strArr]);
				$dv['on_tag_brand_ids'] = $existsArr ?array_column($existsArr,'tb_id'):[];
				//不存在的品牌
				$noExistsArr = array_diff($strArr,$existsArr?array_column($existsArr,'tb_cn_name'):[]);
				foreach ($noExistsArr as $val) {
					$join = [
						'[><]m_cn_model(cm)'=>['tb.tbm_brand_id'=>'brand_id']
					];
					$exists = $this->db->select('tag_brand_cnbrand(tb)',$join,'tb.tbm_tb_id',['cm.brand_name'=>$val]);
					if($exists){
						$dv['on_tag_brand_ids'] = array_merge($dv['on_tag_brand_ids'],$exists);
					}else{
						$join = [
							'[><]m_make(cm)'=>['tb.tbm_mk_id'=>'mk_id']
						];
						$exists = $this->db->select('tag_brand_make(tb)',$join,'tb.tbm_tb_id',[
							'OR'=>[
								'cm.mk_cn_name'=>$val,
								'cm.mk_en_name'=>$val
							]
						]);
						$dv['on_tag_brand_ids'] = array_merge($dv['on_tag_brand_ids'],$exists?:[]);
					}
				}
				// if(in_array($dv['on_oe_id'], $proCateRule['no']))
				// {
				// 	$state = false;
				// 	$dv['excelInfo']['error'] = '无此小类权限';
				// 	$this->import->lineNum = $dv['excelInfo']['line'];
				// 	$this->import->lastError = $dv['excelInfo']['error'];
				// 	continue;
				// }
			}
		}

		//数据重复验证 - 自己
		if($state && !empty($this->import->data))
		{
			$state = !$this->import->checkRepeat([
			    ['on_oe_id','on_pf_id','on_formart'],
		    ]);
		}

		//入库
		if($state && !empty($this->import->data))
		{
			// $rows = $this->db->select('oe_item', ['oe_id'], ['oe_id'=>array_unique(array_column($this->import->data, 'on_oe_id'))]);
			// $itemArr = array_column($rows, null, 'p_id');
			$opuser = getOpuser();
			$datetime = getNowTime();
			$ModelOeNumidx = new ModelOeNumidx();
			$oeIdArr = [];
			$this->db->Begin();
			foreach($this->import->data as $k=>$mv)
			{
				if($k > 0 && $k%1000 === 0) errorLog(__CLASS__.$this->title.':'.$k, 'import');
				$set = [
			
					'on_create_time'=>$datetime,
					'on_update_time'=>$datetime,
					'on_opuser'=>$opuser
				];
				$fashfileds = ['on_oe_id','on_pf_id','on_number','on_formart','on_mk_id','on_spuser'];
				foreach($fashfileds as $filed)
				{	
					
					if(isset($mv[$filed])) $set[$filed] = $mv[$filed];
				}
			
				$this->db->insert('oe_numidx', $set);
				$on_id = $this->db->id();
				//保存标签关系
				$ModelOeNumidx->saveOeNumTb($mv['on_oe_id'], $on_id, $mv['on_tag_brand_ids']??[]);
				//收集相关OE_ID
				$oeIdArr[$mv['on_oe_id']] = $mv['on_oe_id'];
			}
			if($oeIdArr){
				$pro = new pro();
				foreach ($oeIdArr as $oe_id) {
					$pro->synProByOe($oe_id,['nums']);
				}
			}
			$this->db->End();
		}
	
        return $this->import->output(); //生成处理结果
	}


	/**批量更新
     * @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))
		{
			// $check = new \model\check();
			// $proCateRule = $check->checkProRuleCate(array_column($this->import->data, 'on_p_id'), 'E100', 'import');

			$ModelOeNumidx = new ModelOeNumidx();
			foreach($this->import->data as &$dv)
			{
				$dv['on_formart'] = formatNum($dv['on_number']);
				$exists = $ModelOeNumidx->checkExistTemp($dv,$dv['on_id']);
				if(!empty($exists))
				{
					$state = false;
					$dv['excelInfo']['error'] = $exists['msg'];
					$this->import->lineNum = $dv['excelInfo']['line'];
					$this->import->lastError = $dv['excelInfo']['error'];
					continue;
				}

				// if(in_array($dv['on_p_id'], $proCateRule['no']))
				// {
				// 	$state = false;
				// 	$dv['excelInfo']['error'] = '无此小类权限';
				// 	$this->import->lineNum = $dv['excelInfo']['line'];
				// 	$this->import->lastError = $dv['excelInfo']['error'];
				// 	continue;
				// }
			}
		}

		//数据重复验证 - 自己
		if($state && !empty($this->import->data))
		{
			$state = !$this->import->checkRepeat([
			    ['on_pf_id','on_formart'],
		    ]);
		}

		//入库
		if($state && !empty($this->import->data))
		{
		
			$opuser = getOpuser();
			$datetime = getNowTime();

			$this->db->Begin();
			foreach($this->import->data as $k=>$mv)
			{
				$on_id = $mv['on_id'];
				if($k > 0 && $k%1000 === 0) errorLog(__CLASS__.$this->title.':'.$k, 'import');
				$set = [
					'on_create_time'=>$datetime,
					'on_update_time'=>$datetime,
					'on_opuser'=>$opuser
				];
				$fashfileds = ['on_oe_id','on_pf_id','on_number','on_formart','on_mk_id'];
				foreach($fashfileds as $filed)
				{
					if(isset($mv[$filed])) $set[$filed] = $mv[$filed];
				}
				if($this->oe_id){
					$set['on_oe_id'] = $this->oe_id;	
				}
				$this->db->update('oe_numidx', $set, ['on_id'=>$on_id]);

			}
			$this->db->End();
		}
        return $this->import->output(); //生成处理结果
	}
}