<?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\oeModel as modelOeModel;

/**
 * 
 */
class oeModel  extends model
{
	 /**
     * 标题 (用于消息提醒)
     */
	public $title = 'OE车型库'; //固定
	public $import = null;    //固定
	public $rules = null;    //规则
	public $demoData = null;  //样例数据
	public $demoremark = null;  //样例说明
	public $modelOeModel = null;  
 
	
	
	public function __construct()
	{
		parent::__construct(); //执行父类
		$this->import = new \lib\import();
		$this->modelOeModel = new \model\oeModel();


		$this->rules = [
		    ['key'=>'oml_mm_id', 'caption'=>lg('车型ID'), 'formatCell'=>'chkmm_id'],
			['key'=>'oml_oe_id','caption'=>lg('OE'),'must'=>true,'formatCell'=>[\model\oe::class,[],'getPidByNumber',['@'],null],],
		];
		
		//更新
		$this->rulesUpdate = [
            ['key'=>'oml_id','caption'=>lg('ID'),'must'=>true],
            ['key'=>'oml_mm_id', 'caption'=>lg('车型ID'), 'formatCell'=>'chkmm_id'],
			['key'=>'oml_oe_id','caption'=>lg('OE'),'must'=>true,'formatCell'=>[\model\oe::class,[],'getPidByNumber',['@'],null],],
		];
		
		$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, 'oml_oe_id'), 'F500', 'import');

			$modelFiledVals = $this->carmodel->modelFiledVals;
			foreach($this->import->data as $k=>&$dv)
			{
				// if(in_array($dv['oml_oe_id'], $proCateRule['no']))
				// {
				// 	$state = false;
				// 	$dv['excelInfo']['error'] = '无此品名权限';
				// 	$this->import->lineNum = $dv['excelInfo']['line'];
				// 	$this->import->lastError = $dv['excelInfo']['error'];
				// 	continue;
				// }

				$dv['mmids'] = [];
				if(!empty($dv['oml_mm_id']))
				{
					$dv['mmids'] = [$dv['oml_mm_id']];
				}
				

				if(empty($dv['mmids']))
				{
					$state = false;
					$dv['excelInfo']['error'] = '[车型ID]无法匹配';
					$this->import->lineNum = $dv['excelInfo']['line'];
					$this->import->lastError = $dv['excelInfo']['error'];
					continue;
				}

			}
		}

		//入库
		if($state && !empty($this->import->data))
		{
			$this->db->Begin();
			foreach($this->import->data as $k=>&$dv)
			{
				if($k > 0 && $k%1000 === 0) errorLog(__CLASS__.$this->title.':'.$k, 'import');
				foreach($dv['mmids'] as $mmid)
				{
					$set = [];
					$fashfileds = array_column($this->rules, 'key');
					foreach($fashfileds as $filed)
					{
						if(isset($dv[$filed]) && stripos($filed, 'oml_') === 0) 
						{
							$set['base'][$filed] = $dv[$filed];
						}
					}
					$set['base']['oml_mm_id'] = $mmid;
					$res = $this->modelOeModel->saveOeModelDetail(0, $set);
					if(!empty($res['msg']))
					{
						$state = false;
						$dv['excelInfo']['error'] = $res['msg'];
						$this->import->lineNum = $dv['excelInfo']['line'];
						$this->import->lastError = $dv['excelInfo']['error'];
						continue;
					}
				}
			}
			if($state) 
				$this->db->End();
			else
				$this->db->rollBack();
		}
        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, 'oml_oe_id'), 'F500', 'import');

			$modelFiledVals = $this->carmodel->modelFiledVals;
			foreach($this->import->data as $k=>&$dv)
			{
				// if(in_array($dv['oml_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))
		{
			$this->db->Begin();
			foreach($this->import->data as $k=>&$dv)
			{
				$set = [];
				$fashfileds = array_column($this->rulesUpdate, 'key');
				foreach($fashfileds as $filed)
				{
					if(isset($dv[$filed]) && stripos($filed, 'oml_') === 0) 
					{
						$set['base'][$filed] = $dv[$filed];
					}
				}
				unset($set['base']['oml_id']); 
				$oml_id = $dv['oml_id'];
				
				$res = $this->modelOeModel->saveOeModelDetail($oml_id, $set);
				if(!empty($res['msg']))
				{
					$state = false;
					$dv['excelInfo']['error'] = $res['msg'];
					$this->import->lineNum = $dv['excelInfo']['line'];
					$this->import->lastError = $dv['excelInfo']['error'];
					continue;
				}
			}
			if($state) 
				$this->db->End();
			else
				$this->db->rollBack();
		}
        return $this->import->output(); //生成处理结果
	}
}