<?php
namespace model;

use \model;
use \model\check;
use \model\collocation;
use \model\carmodel;
use model\pro\cate;
use model\pro\factory;
use model\pro\pro;

class oeModelCN extends model
{
	public $table = 'oe_model_cn_link';
    public $key = 'oml_id';

	public $cate;
    public $factory;

	public function __construct ()
    {
		parent::__construct();
		$this->cate = new cate();
        $this->factory = new factory();
	}

	public function getDetail($oml_id)
	{
		$data = $this->getList(['oml_id'=>$oml_id]);
		if(empty($data['rows'])) exitJson('记录不存在');
		$arr =$data['rows'][0];
		return $arr;
	}

	


	public function delData($idArr)
	{
		if(!empty($idArr)){

			$arr = $this->db->select('oe_model_cn_link', 'oml_oe_id',['oml_id'=>$idArr,'GROUP'=>'oml_oe_id']);

			$this->db->Begin();

			$this->db->delete('oe_model_cn_link', ['oml_id'=>$idArr]);
			if($arr)
			{
				$oe = new oe();
				$oe->initTagBrand($arr);
				$pro = new pro();
				foreach ($arr as $val) {
					$pro->synProByOe($val,['cnmodel']);
				}
			}
			$this->db->End();
		}
		return [];
	}
	
	public function setCell($kid, $setArr)
	{
		if(!empty($kid) && !empty($setArr))
		{
		
			$old = $this->db->get('oe_model_cn_link', '*', ['oml_id'=>$kid]);
			if(empty($old)) exitJson('记录不存在');

			$this->db->Begin();
			foreach($setArr as $filed=>$val){
				if(stripos($filed, 'oml_') !== 0){
					unset($setArr[$filed]);
					continue;
				}
			}
			if(!empty($setArr)){
				$opuser = getOpuser();
				$datetime = getNowTime();
				$setArr['oml_opuser'] = $opuser;
				$setArr['oml_update_time'] = $datetime;
			
				$this->db->update('oe_model_cn_link', $setArr, ['oml_id'=>$kid]);
			}
			$this->db->End();
		}
		return [];
	}

    public function getModelList($params, $rules = [])
	{
		$filters = $params['filters'];
		$page = $params['page'];
		$pagesize = $params['rows'];
		$sidx = empty($params['sidx'])? '': $params['sidx'];
		$sord = empty($params['sord'])? 'asc': $params['sord'];
		$orderby = empty($params['orderby'])? 'brand_initial,brand_name,make_name,mod1_name,mod2_name,mod2_start_year,mod3_name,mod3_start_year': $params['orderby'];
		$table = 'oe_model_cn_link(oml)';
		$fields = ['cat.id(cat_id)', 'pcat.'.cateName().'(pcat_name)', 'cat.'.cateName().'(cat_name)','oi.oe_id', 'oi.oe_oe','mod3.*', 'oml.*','au_name'];
		
		$refiled = [
			'cat_name'=>'cat.'.cateName(),
			'pcat_name'=>'pcat.'.cateName(),
			'oml_opuser'=>'oml.oml_opuser',
			'oml_create_time'=>'oml.oml_create_time',
			'oml_update_time'=>'oml.oml_update_time',
		];
		$this->set('othjoin', []);
		$this->set('sTags', false);
		$this->set('refiled', $refiled);
		// $sidx =  strtr($sidx, $refiled);

		$join = [
			"[><]oe_item(oi)" => ["oml.oml_oe_id" => "oe_id"],
			"[><]pro_cate(cat)" => ["oi.oe_cate_id" => "id"],
			"[><]pro_cate(pcat)" => ["cat.parent_id" => "id"],
			"[><]m_cn_model(mod3)" => ["oml.oml_mod3_id" => "mod3_id"],
			"[>]adm_user(au)"=>["oml.oml_opuser"=>"au_id"]
		];

	
        $where = $this->filter2medoo($filters,function(&$field,&$op,&$data){
			$field = strtr( $field, $this->get('refiled'));
        });
		$join = array_merge($join, $this->get('othjoin'));
		

		foreach($rules as $filed=>$val)
		{
			if(empty($val)) continue;
			switch($filed)
			{
				case 'numbers':
					foreach($val as $tk=>$tv)
					{
						$val[$tk] = formatNum($tv);
					}
					$where["AND #num"] = [
						"OR" => [
							'oe_oe_format'.($rules['numlike']? '[~]': '') => $val
						]
					];
				break;
			}
		}
		$fields = array_unique($fields);

		if(!empty($params['keys'])) $where['oml_id'] = explode(',', $params['keys']);
		if(!empty($params['oml_id'])) $where['oml_id'] = $params['oml_id'];
		if(!empty($params['oe_id'])){
			$where['oml_oe_id'] = $params['oe_id'];
		}
		if(!empty($params['brand_id'])) $where['brand_id'] = $params['brand_id'];
		
		$where['GROUP'] = 'oml_id';
        $where = $this->listWhere($where,$page,$pagesize,$sidx,$sord,$orderby);
		if($page>0 && $pagesize>0){
			$pages = $this->paging($table,$join, 'oml_id',$where,$page,$pagesize);
			$where["LIMIT"] = [$pages['limit'],$pagesize];
		}
		
        $modArr = $this->db->select($table,$join,$fields, $where);
        
		$collocation = new collocation();
		$collArr = $collocation->lrtree->getChilds(13);
		$collArr = array_column($collArr, LG_NAME, 'o_id');

		foreach($modArr as $k=>&$v)
		{
			$v['captions'] = [
				'oml_from'=>!empty($collArr[$v['oml_from']])? $collArr[$v['oml_from']]: '',
				'oml_opuser'=>$v['au_name']
			];
		}
		unset($v);
		$data = [
			'page'=> $page,
			'total'=> $pages['total'],
			'records' => $pages['records'],
			'rows' => array_values($modArr)
		];
		return $data;
	}

    
    /**
	  * @method 新增或者编辑待进入
	  * @param  $oml_id int [必填] 0表示新增
	  * @param  $setArr array [必填] ['pmlt_cate'=>.....]
	  * @author soul
	  */
	public function saveModelDetail($oml_id, $setArr)
	{
		$baseArr = $setArr['base'];
		if(empty($baseArr['oml_mod3_id'])) exitJson('车型必填');
		//确认产品ID
		if(empty($baseArr['oml_oe_id']))
		{
			$pidArr = $this->db->get('oe_item',['oe_id'], ['oe_oe_format'=>formatNum($baseArr['oe_oe'])]);
			if(empty($pidArr)) exitJson('OE不存在');
			$baseArr['oml_oe_id'] = $pidArr['oe_id'];
		}
        unset($baseArr['oe_oe']);
        $uniwhere = [
			'oml_oe_id'=>$baseArr['oml_oe_id'],
			'oml_mod3_id'=>$baseArr['oml_mod3_id'],
			'oml_id[!]'=>$oml_id
		];
        $chk = $this->db->get('oe_model_cn_link', ['oml_id'], $uniwhere);
		if(!empty($chk)){			
			return ['code'=>0, 'table'=>'oe_model_cn_link', 'msg'=>'中国车型库已存在'];
		}
		
		$datetime = getNowTime();
		$opuser = getOpuser();
		$this->db->Begin();
		$baseArr['oml_opuser'] = $opuser;
		$baseArr['oml_update_time'] = $datetime;
		if($oml_id > 0)
		{
			$this->db->update('oe_model_cn_link', $baseArr, ['oml_id'=>$oml_id]);
		}
		else
		{
			$baseArr['oml_create_time'] = $datetime;
			$this->db->insert('oe_model_cn_link', $baseArr);
			$oml_id = $this->db->id();
		}
        
		$this->db->End();
		return ['oml_id'=>$oml_id];
	}


    public function getCnModIdById($oe_id)
    {
        $rows = $this->db->select('oe_model_cn_link', ['oml_mod3_id'], ['oml_oe_id'=>$oe_id]);
		$hasArr = array_column($rows, 'oml_mod3_id');

		return $hasArr;
    }
    
    public function addOECnModel($oe_id, $modArr)
	{
		if(!empty($oe_id) && !empty($modArr))
		{
			$temp = [];
			$opuser = getOpuser();
			$datetime = getNowTime();
			$addArr = [];
			foreach($modArr as $v)
			{
				$v['oml_oe_id'] = $oe_id;
				$v['oml_opuser'] = $opuser;
				$v['oml_create_time'] = $datetime;
				$v['oml_update_time'] = $datetime;
				$temp[$v['oml_mod3_id']] = $v;
			}
			$modArr = $temp;
			$rows = $this->db->select('oe_model_cn_link', ['oml_mod3_id'], ['oml_oe_id'=>$oe_id]);
			$hasArr = array_column($rows, 'oml_mod3_id');
			
			$this->db->Begin();
			foreach($modArr as $mmid=>$row)
			{
				if($row['oml_mod3_id'] > 0 && !in_array($row['oml_mod3_id'], $hasArr))
				{
					$this->db->insert('oe_model_cn_link', $row);
				}
			}
			$oe = new oe();
			$oe->initTagBrand($oe_id);
			$pro = new pro();
			$pro->synProByOe($oe_id,['cnmodel']);
				
			$this->db->End();
		}
		return [];
	}
}