<?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\check;
use \model\pro\promodelcn;
use \model\pro\pro;

/**
 * 
 */
class procnmodel  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->rules = [
			 ['key'=>'pml_p_id','caption'=>lg('物料编码'),'must'=>true,'formatCell'=>'p_idLinkInnum'],
		     ['key'=>'pml_mod3_id',          'caption'=>lg('车型ID'),'must'=>true],
			 ['key'=>'pml_pos0','caption'=>lg('位置1')],
			 ['key'=>'pml_pos1','caption'=>lg('位置2')],
			 ['key'=>'pml_pos2','caption'=>lg('位置3')],
			 ['key'=>'pml_pos3','caption'=>lg('位置4')],
			 ['key'=>'pml_pos4','caption'=>lg('位置5')],
			 ['key'=>'pml_node1','caption'=>lg('安装备注')],
			 ['key'=>'pml_remark','caption'=>lg('备注')],
		];

		$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([
			    ['pml_p_id', 'pml_mod3_id']
		    ]);
		}

		//入库
		if($state && !empty($this->import->data))
		{
			$opuser = getOpuser();
			$datetime = getNowTime();
			$this->db->Begin();
			$addAnyArr = [];
			$perAdd = 1000;
			$total = count($this->import->data);
			$promodelcn = new promodelcn();
			foreach($this->import->data as $k=>$mv)
			{
				$set = [
					'opuser'=>$opuser,
					'update_time'=>$datetime
				];
				$fashfileds = array_column($this->rules, 'key');
				foreach($fashfileds as $filed)
				{
					if(isset($mv[$filed]) && stripos($filed, 'pml_') === 0) 
					{
						$set[$filed] = $mv[$filed];
					}
				}
				$exist = $promodelcn->checkExist($mv);
				if(!empty($exist))
				{
					$this->db->update('pro_model_cn_link', $set, ['pml_p_id'=>$mv['pml_p_id'],'pml_mod3_id'=>$mv['pml_mod3_id']]);
				}
				else
				{
					$set['create_time'] = $datetime;
					$addAnyArr[] = $set;
				}
				if(count($addAnyArr) == $perAdd || ($k+1) == $total)
				{
					if(!empty($addAnyArr)) $this->db->insert('pro_model_cn_link', $addAnyArr);
					$addAnyArr = [];
					$logArr = [
						'register'=>$k,
						'class'=>__CLASS__,
						'title'=>$this->title,
						'option'=>'importing'
					];
					errorLog($logArr, 'import');
				}
			}
			$pidArr = array_column($this->import->data, 'pml_p_id');
			if($pidArr){
				$pro = new pro();
				$pro->initTagBrand($pidArr);
			}
			$this->db->End();
		}
        return $this->import->output(); //生成处理结果
	}
}