<?php
/*
 [
    'key'=>'rule1',                             //键名
    'caption'=>'编码规则',                      //字段名
    'must'=> true,                              //是否必须,默认false
    'mustCols'=> ['ruleA','ruleB']              //当此列存在时，必须有的其他列 ，默认空
    'minlen'=>0,                                //最小长度 默认0不判断
    'maxlen'=>50,                               //最大长度 默认0不判断
    'type'=>'number',                           //类型 number,string,date,datetime 默认 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\tags;
use \model\check;

/**
 * 
 */
class smartMyimport  extends model
{
	 /**
     * 标题 (用于消息提醒)
     */
	public $title = '自定义型号'; //固定
	public $import = null;    //固定
	public $rules = null;    //规则
	public $rulesUpdate = null;    //更新规则
	public $rulesDelete = null;    //删除规则
	private $dataTitle='';
	public function __construct()
	{
        $db = new \lib\db(\mvc::$cfg['db']['smart']);
		parent::__construct($db);
		$this->import = new \lib\import();
		$this->rules = [
		     ['key'=>'sml_p_id',           'caption'=>lg('GSP型号'), 'formatCell'=>'pc_id','must'=>true],
		];
		$this->rulesUpdate = [
		];
		
		$this->rulesDelete = [
		];
		$this->dataTitle = urldecode(\mvc::$req['title']);
		if(empty($this->dataTitle) && !empty(\mvc::$req['params'])){
            $params =json_decode(\mvc::$req['params'],true);
            $this->dataTitle = urldecode($params['title']);
        }
	}
	
	 /**处理导入
     * @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([
			    ['sml_p_id']
		    ]);
		}

		//入库
		if($state && !empty($this->import->data))
		{
			$this->db->begin();
			if(!$this->dataTitle){
			    return;
			}
			$smlh_id = $this->db->replace('smt_myimport_list_head',[
			    'smlh_title' => $this->dataTitle,    
			    'opuser' => getOpUser()  
			],'smlh_title');
			
			$smlh_id = $this->db->get('smt_myimport_list_head','smlh_id',['smlh_title'=>$this->dataTitle]);
			if(!$smlh_id){
			    return;
			}
			$this->db->delete('smt_myimport_list',['sml_smlh_id'=>$smlh_id]);
			foreach($this->import->data as $k=>&$item)
			{
				if($k > 0 && $k%1000 === 0) errorLog(__CLASS__.$this->title.':'.$k, 'import');
				$hasId = $item['checkInfo']['hasId'];
			    unset($item['excelInfo']);
			    unset($item['checkInfo']);
			    $item['sml_smlh_id'] = $smlh_id;
			    $this->db->insert('smt_myimport_list',$item);
			}
			$this->db->End();
		}
       return $this->import->output(); //生成处理结果
	}

}