<?php
namespace model\homecn;
use \model;
use model\oeModel;
use model\oeModelCN;
use model\oeModelNA;
use model\pro\pro;
use model\pro\promodel;
use model\pro\promodelcn;

/**
 * Class cate
 * @author
 * @copyright
 */
class cate extends \model
{
    public function getCateLists($u_id=0,$params=[])    
    {
        $mm_id = $params['mm_id']??0;
        $mod3_id = $params['mod3_id']??0;
        $number = $params['number']??'';
        //获取当前用户的收藏分类
        $ssql ='';
        $favoritesArray = [];
        $where = '';
        if($u_id){
            $old = $this->db->get('user',['u_id','u_mycate_ids'],['u_id'=>$u_id]);
        
            if($old['u_mycate_ids']){
                $favoritesArray = array_filter(explode(',', $old['u_mycate_ids']));
                $favoritesInClause = implode(',', array_map('intval', $favoritesArray));
                $ssql = "FIELD(pc_parent.id, $favoritesInClause) DESC,FIELD(pc.id, $favoritesInClause) DESC,";
            }
        }
        //国际车型
        if($mm_id){
            $oemodelsql = sprintf(" JOIN oe_model_link oml on oml.oml_oe_id = oe_item.oe_id AND oml.oml_mm_id = %d",$mm_id);
            // $promodelsql = sprintf(" JOIN pro_model_link pml on  pml.pml_p_id = pro.p_id AND pml.pml_mm_id =%d",$mm_id);
            
        }
        //中国车型
        if($mod3_id){
            $oemodelsql = sprintf(" JOIN oe_model_cn_link oml on oml.oml_oe_id = oe_item.oe_id AND oml.oml_mod3_id = %d",$mod3_id);
            // $promodelsql = sprintf(" JOIN pro_model_cn_link pml on pml.pml_p_id = pro.p_id AND pml.pml_mod3_id = %d",$mod3_id);
        }

        //根据number查询
        if($number){
            $where .= sprintf("AND oe_id in (SELECT DISTINCT on_oe_id FROM oe_numidx WHERE on_formart like '%s%%') ",$number);
        }

        $sql = sprintf("SELECT 
            pc.id AS cate_id,
            pc.".LG_NAME." AS cate_name,
            pc.cat_icon AS cate_icon,
            pc_parent.id AS pcate_id,
            pc_parent.".LG_NAME." AS pcate_name,
            pc_parent.cat_icon AS pcate_icon
        FROM oe_item %s
        JOIN pro_cate pc ON oe_cate_id = pc.id
        LEFT JOIN pro_cate pc_parent ON pc.parent_id = pc_parent.id 
        LEFT JOIN pro_cate pc_parent_parent ON pc_parent.parent_id = pc_parent_parent.id
        WHERE oe_cate_id IS NOT NULL %s
        ORDER BY %s pc_parent_parent.level,pc_parent_parent.id,pc_parent_parent.en_name ASC,pc_parent.id ASC,pc.en_name ASC",$oemodelsql,$where,$ssql);
        $all = $this->db->query($sql)->fetchAll();
		$arr = [];
		foreach ($all as $key => $val) {
            $iscollect = false;
            $iscollect2 = false;
            if(in_array($val['pcate_id'],$favoritesArray)) $iscollect = true;
            if(in_array($val['cate_id'],$favoritesArray)) $iscollect2 = true;
			if(isset($arr[$val['pcate_id']])){
				$arr[$val['pcate_id']]['son'][$val['cate_id']] = [
					'cate_id'=>$val['cate_id'],
					'cate_name'=>$val['cate_name'],
                    'cate_icon'=>$val['cate_icon'],
                    'iscollect'=>$iscollect2,
				];
			}else{
				$arr[$val['pcate_id']] = [
					'pcate_id'=>$val['pcate_id'],
					'pcate_name'=>$val['pcate_name'],
                    'pcate_icon'=>$val['pcate_icon'],
                    'iscollect'=>$iscollect,
					'son'=>[
						$val['cate_id']=>[
							'cate_id'=>$val['cate_id'],
							'cate_name'=>$val['cate_name'],
                            'cate_icon'=>$val['cate_icon'],
                            'iscollect'=>$iscollect2,
						]
					]
				];
			}
		}
        return $arr;
    }

     public function getProList($params)
    {   
        $page = $params['page']?:1;
        $pagesize = $_COOKIE['pagesize']?:10;
       
        $where = '';
        $join = '';
        if($params['number']){

            $params['number'] = strtr($params['number'],['，'=>',',';'=>',','；'=>',',"\n"=>',']);
            $number = formatNums($params['number']);
            $numberstrs = implode("','", $number);
           
            if(count($number)==1)
            {
                //先找oe和pro对应的oe_id
                $where .= sprintf(" AND (
                    oe_id in (SELECT DISTINCT on_oe_id FROM oe_numidx WHERE on_formart like '%s%%') 
                    or 
                    pro.p_id in (SELECT DISTINCT pn_p_id FROM pro_numidx WHERE pn_formart like '%s%%')
                )", $number[0], $number[0]);
                // $join = 'LEFT JOIN (
                //     SELECT on_oe_id as id, on_formart as formart,\'oe\' as type FROM oe_numidx WHERE on_formart like \'' . $number[0] . '%\'
                //     UNION
                //     SELECT pn_p_id as id, pn_formart as formart,\'pro\' as type  FROM pro_numidx WHERE pn_formart like \'' . $number[0] . '%\'
                // ) AS numidx ON oe.oe_id = numidx.id AND numidx.type=\'oe\' OR pro.p_id = numidx.id AND numidx.type=\'pro\'';
                // $where .= sprintf(" AND (numidx.formart LIKE '%s%%')",$number[0]);
            }
            else
            {   
                $where .= sprintf(" AND 
                oe_id in (SELECT DISTINCT on_oe_id FROM oe_numidx WHERE on_formart IN ('%s'))
                or 
                p_id in (SELECT DISTINCT pn_p_id FROM pro_numidx WHERE pn_formart IN ('%s'))",
                $numberstrs,$numberstrs
                );
                // $join = 'LEFT JOIN '
                // $join = 'LEFT JOIN (
                //     SELECT on_oe_id as id, on_formart as formart,\'oe\' as type FROM oe_numidx WHERE on_formart IN (\'' . $numberstrs . '\')
                //     UNION
                //     SELECT pn_p_id as id, pn_formart as formart,\'pro\' as type  FROM pro_numidx WHERE pn_formart IN (\'' . $numberstrs . '\')
                // ) AS numidx ON oe.oe_id = numidx.id AND numidx.type=\'oe\' OR pro.p_id = numidx.id AND numidx.type=\'pro\'';
                // $where .= sprintf(" AND (numidx.formart IN ('%s'))",$numberstrs);
            }
            
        }
        if($params['scate_id']){
            $where .= sprintf(" AND oe.oe_cate_id=%d",$params['scate_id']);
        }
        if($params['pcate_id']){
            $where .= sprintf(" AND pc.parent_id = %d",$params['pcate_id']);
        }

        if($params['mm_id']){
            $join .= sprintf(" JOIN oe_model_link oml on oml.oml_oe_id = oe.oe_id AND oml.oml_mm_id = %d",$params['mm_id']);    
        }

        if($params['mod3_id']){
            $join .= sprintf(" JOIN oe_model_cn_link oml on oml.oml_oe_id = oe.oe_id AND oml.oml_mod3_id = %d",$params['mod3_id']);    
        }

        if($params['engine']){
            $engineVal = trim($params['engine']);

            $unionSql = sprintf("
                SELECT DISTINCT oe_id FROM (
                    SELECT omcl.oml_oe_id as oe_id
                    FROM oe_model_cn_link omcl 
                    INNER JOIN m_cn_model mcm ON omcl.oml_mod3_id = mcm.mod3_id
                    WHERE FIND_IN_SET('%s', mcm.mod3_engine) > 0
                    
                    UNION
                    
                    SELECT oml.oml_oe_id as oe_id
                    FROM oe_model_link oml 
                    INNER JOIN m_model mm ON oml.oml_mm_id = mm.mm_id
                    WHERE FIND_IN_SET('%s', mm.mm_engine) > 0
                ) AS engine_matches
            ", $engineVal, $engineVal);
            
            $oeIdsResult = $this->db->query($unionSql)->fetchAll(\PDO::FETCH_COLUMN);
            $oeIds = implode(',', $oeIdsResult ?: ['0']);
            
            $where .= sprintf(" AND (oe_id IN (%s) OR oe_engine LIKE '%%%s%%' OR COALESCE(pro.p_engine, '') LIKE '%%%s%%')", 
                $oeIds, $engineVal, $engineVal);
            
        }
        
        // 添加北美车型筛选逻辑
        if(isset($params['oml_id']) && count($params['oml_id'])){
            $omlIdList = array_map('intval', $params['oml_id']);
            $omlIdList = array_values(array_filter($omlIdList, function($id){
                return $id > 0;
            }));
            $omlIdStr = implode(',', $omlIdList);
            $baseIdList = [];
            if($omlIdStr){
                $sql = sprintf("SELECT DISTINCT oml_base_id FROM oe_model_na WHERE oml_id IN (%s)", $omlIdStr);
                $baseIdList = $this->db->query($sql)->fetchAll(\PDO::FETCH_COLUMN);
            }
            $baseIdStr = implode("','", $baseIdList);
            if($baseIdStr) $where .= sprintf(" AND oe.oe_id IN (SELECT DISTINCT oml_oe_id FROM oe_model_na WHERE oml_base_id IN ('%s'))", $baseIdStr);
        }else if($params['year']&&$params['make_id']&&$params['model_id']){
           $baseIdList = $this->db->select('na_vehicle_base','base_id',['base_year_id'=>$params['year'],'base_make_id'=>$params['make_id'],'base_model_id'=>$params['model_id']]);
           $baseIdStr = implode("','", $baseIdList);
           if($baseIdStr) $where .= sprintf(" AND oe.oe_id IN (SELECT DISTINCT oml_oe_id FROM oe_model_na WHERE oml_base_id IN ('%s'))", $baseIdStr);
        }
       

        // 合并CC和KW查询
        $hasCCOrKW = ($params['start_cc'] || $params['end_cc'] || $params['start_kw'] || $params['end_kw']);

        if($hasCCOrKW) {
            $ccCondition1 = $ccCondition2 = $kwCondition1 = $kwCondition2 = "1";
            
            if($params['start_cc']) {
                $ccCondition1 .= sprintf(" AND mcm.mod3_cc >= %d", $params['start_cc']);
                $ccCondition2 .= sprintf(" AND mm.mm_cc >= %d", $params['start_cc']);
            }
            if($params['end_cc']) {
                $ccCondition1 .= sprintf(" AND mcm.mod3_cc <= %d", $params['end_cc']);
                $ccCondition2 .= sprintf(" AND mm.mm_cc <= %d", $params['end_cc']);
            }
            if($params['start_kw']) {
                $kwCondition1 .= sprintf(" AND mcm.mod3_kw >= %d", $params['start_kw']);
                $kwCondition2 .= sprintf(" AND mm.mm_kw >= %d", $params['start_kw']);
            }
            if($params['end_kw']) {
                $kwCondition1 .= sprintf(" AND mcm.mod3_kw <= %d", $params['end_kw']);
                $kwCondition2 .= sprintf(" AND mm.mm_kw <= %d", $params['end_kw']);
            }
            
            $unionSql = sprintf("
                SELECT DISTINCT oe_id FROM (
                    SELECT omcl.oml_oe_id as oe_id
                    FROM oe_model_cn_link omcl 
                    INNER JOIN m_cn_model mcm ON omcl.oml_mod3_id = mcm.mod3_id
                    WHERE %s AND %s
                    
                    UNION
                    
                    SELECT oml.oml_oe_id as oe_id
                    FROM oe_model_link oml 
                    INNER JOIN m_model mm ON oml.oml_mm_id = mm.mm_id
                    WHERE %s AND %s
                ) AS combined_matches
            ", $ccCondition1, $kwCondition1, $ccCondition2, $kwCondition2);

            $resultIds = $this->db->query($unionSql)->fetchAll(\PDO::FETCH_COLUMN);
            $ids = implode(',', $resultIds ?: ['0']);
            $where .= sprintf(" AND oe_id IN (%s) ", $ids);
        }

        $searchsql = sprintf('SELECT DISTINCT oe.oe_id,pro.p_id,
            pc.id AS cate_id,pc.'.LG_NAME.' AS cate_name,
            COALESCE(pro.p_'.LG_NAME.',oe.oe_'.LG_NAME.') as pro_name,
            COALESCE(pro.p_oe,oe.oe_oe) as main_oe,
            fac.pf_name,
            pc.cat_pos1,pc.cat_pos2,pc.cat_pos3,pc.cat_pos4,pc.cat_pos5,pro.p_innum,pb.pb_'.LG_NAME.' AS pb_name
            FROM  oe_item oe 
            LEFT JOIN  pro  ON  oe.oe_id = pro.p_oe_id AND pro.p_pb_id=1
            LEFT JOIN  pro_cate pc ON oe.oe_cate_id = pc.id
            LEFT JOIN  pro_factory fac ON oe.oe_pf_id = fac.pf_id
            LEFT JOIN  pro_brand pb ON pro.p_pb_id=pb.pb_id
            %s WHERE 1 %s',$join,$where);
        // dd($searchsql);
        $cntsql = sprintf('SELECT count(*) as counts FROM (%s) as a',$searchsql);
        $total = $this->db->query($cntsql)->fetch();

        if($total['counts']>0)
        {
            $sql = sprintf('%s
            ORDER BY 
            CASE WHEN pro.p_id IS NOT NULL THEN 0 ELSE 1 END, pro.p_oe_format, pro.p_innum_format, oe.oe_oe_format LIMIT %d,%d',$searchsql,($page-1)*$pagesize,$pagesize);

            $arr = $this->db->query($sql)->fetchAll();
            $allPos = (new pro())->allPos;
            //列表： 主图  产小类 小类   参数    汽车品牌    国际车型   中国车型
            $proArr = [];
            foreach ($arr as $key => $val) 
            {   
                $val['number'] = $params['number'];
                $item = [
                    'id'=>0,
                    'type'=>'',
                    'pro_name'=>$val['pro_name'],
                    'main_oe'=>$val['main_oe'],
                    'bigImg'=>'',
                    'smallImg'=>'',
                    'cate_name'=>$val['cate_name'],
                    'cate_id'=>$val['cate_id'],
                    'param'=>[],
                    'tag_brand'=>'',
                    'cnmodel'=>[],
                    'model'=>[],
                    'pb_name'=>$val['pb_name'],
                    'p_innum'=>$val['p_innum']??'',
                ];
                if($val['p_id'])
                {
                    $item['id'] = $val['p_id'];
                    $item['type'] = 'pro';
                      
                    $pdata = $this->getProInfo($val['p_id'],$val);
                    $item = array_merge($item,$pdata);
                }
                else 
                {
                    $item['id'] = $val['oe_id'];
                    $item['type'] = 'oe';
                
                    $pdata = $this->getOeInfo($val['oe_id'],$val);
                    $item = array_merge($item,$pdata);
                }
                $proArr[] = $item;
            }
        }
        return  [
            'page'=>$page,
            'pagesize'=>$pagesize,
            'recordCount'=>$total['counts']?:0,
            'list'=>$proArr?:[]
        ];
    }

    public function getProInfo($p_id,$base = [])
    {
        $item = [];
        if(!$base){
            $table = 'pro(p)';
            $join = [
                "[><]pro_cate(cat)" => ["p.p_cate" => "id"],
                "[>]pro_factory(fac)" => ["p.p_pf_id" => "pf_id"],
                "[>]pro_brand(pb)" => ["p.p_pb_id" => "pb_id"]
            ];

            $fields = ['cat.id(cat_id)', 'cat.cat_pos1','cat.cat_pos2','cat.cat_pos3','cat.cat_pos4','cat.cat_pos5','cat.'.cateName().'(cat_name)', 'cat.cn_name(cat_name_cn)','cat.en_name(cat_name_en)', 'p.*','fac.pf_name','pb.pb_'.cateName().'(pb_name)'];
            $where = ['p_id'=>$p_id];
            $base = $this->db->get($table,$join,$fields,$where);
            $base['pro_name'] = $base['p_'.LG_NAME];
            $base['main_oe'] = $base['p_oe'];
            $base['imgs'] = [];
            $join = ["[><]files"=>["pic_fileid"=>'fileid'],"[>]supplier"=>["pic_sup_id"=>"sup_id"]];
            $picrows = $this->db->select('pro_pic',$join,'*',['pic_p_id'=>$p_id,'ORDER'=>['pic_ismain'=>'DESC','pic_type'=>'img','pic_sort'=>'ASC']]);
            foreach ($picrows as  $pic) {
                if($pic['pic_type']=='img' && $pic['filetype']=='image'){
                    $pic['bigImg'] = $pic['filepath'].'/'.$pic['filebasename'].'big.'.$pic['fileextname'];
                    $pic['smallImg'] = $pic['filepath'].'/'.$pic['filebasename'].'small.'.$pic['fileextname'];
                }
                $base['imgs'][$pic['pic_type']][] = $pic;
            }
            $base['type']='pro';
            $base['id']=$p_id;
        }
        //取主图
        $join = [
            "[><]files(file)"=>["pic.pic_fileid"=>"fileid"]
        ];
        $pic = $this->db->get('pro_pic(pic)',$join,'*',['pic_p_id'=>$p_id,'pic_ismain'=>1,'pic_type'=>'img']);
        if($pic){
            $item['bigImg'] = $pic['filepath'].'/'.$pic['filebasename'].'big.'.$pic['fileextname'];
            $item['smallImg'] = $pic['filepath'].'/'.$pic['filebasename'].'small.'.$pic['fileextname'];
        }

        $allPos = (new pro())->allPos;
        $paramArr2 = [];
        foreach ($allPos as $pos => $v) {
            if($base['cat_'.$pos] && $base['p_'.$pos]) {
                $pos = array_intersect(explode('/',$base['p_'.$pos]),explode(',',$base['cat_'.$pos]));
                if($pos) $paramArr2[] = ['name'=>$v['name'],'value'=>implode('/',$pos)];
            }
        }

        //查参数
        $paramArr = [];

        //参数
        $fields = ['ppv_p_id', 'ptpa_id', 'ptpa_type', 'ptpa_unit', 'ptpa_decimal', 'ppv_val_int', 'ppv_val_double', 'ppv_val_string', 'ptpa_col_order'];
        $fields = langSqlFields($fields, 'pa.', 'ptpa_', true);
        $fields = langSqlFields($fields, 'pps.', 'ppv_val_', true);
        $fields = langSqlFields($fields, 'ppsu.', 'ptpa_unit_', true);
        $sqltpl =sprintf("SELECT ".implode(',', $fields)."  FROM `pro_param_val` pv
        JOIN part_param pa ON ptpa_id = ppv_ptpa_id
        LEFT JOIN part_param_sche pps ON ((pps.pps_ptpa_id = ptpa_id AND ppv_val_string = pps.cn_name) or (pps.pps_ptpa_id = ptpa_pid and pps_id = ppv_val_int))
        LEFT JOIN part_param_sche ppsu ON ppsu.pps_ptpa_id = 0 and ptpa_unit = ppsu.cn_name
        WHERE ppv_p_id=%d ORDER BY ptpa_pid DESC,ptpa_id ASC",$p_id);
        $rows = $this->db->query($sqltpl)->fetchAll();
        foreach($rows as $row){
            
            if($row['ppv_val_int']){
                $row['ppv_val'] = $row['ppv_val_'.LG_NAME].($row['ptpa_unit_'.LG_NAME]?:$row['ptpa_unit']);
                $paramArr[] = ['name'=>$row['ptpa_'.LG_NAME],'value'=>$row['ppv_val']];
                continue;
            }
            if($row['ptpa_type']=='string'){
                $row['ppv_val'] = $row['ppv_val_'.LG_NAME];
            }elseif($row['ptpa_type']=='double'){
                $row['ppv_val'] = floatval(number_format($row['ppv_val_double'], $row['ptpa_decimal'],".",""));
            }
            $paramArr[] = ['name'=>$row['ptpa_'.LG_NAME],'value'=>$row['ppv_val'].($row['ptpa_unit_'.LG_NAME]?:$row['ptpa_unit'])];
        }
        $item['param']  = array_merge($paramArr2,$paramArr??[]);
        //查汽车品牌
        $proTagRes = $this->db->select('pro_tag_brand(ptb)',['[><]tag_brand(tb)'=>['ptb.ptb_p_id'=>'tb_id']],['ptb_p_id','tb_names'=>raw('GROUP_CONCAT(tb_'.LG_NAME.' ORDER BY CONVERT(tb_'.LG_NAME.' USING gbk))')],['ptb_p_id'=>$p_id]);

        $item['tag_brand'] = $proTagRes['tb_names']??'';
        //查中国车型
        $join = [
            "[><]m_cn_model(mod3)" => ["pml.pml_mod3_id" => "mod3_id"],
        ];
        $where = [
            'pml_p_id'=>$p_id,
            'ORDER'=>['brand_initial','brand_name','make_name','mod1_name','mod2_name','mod2_start_year','mod3_name','mod3_start_year']
        ];
        $cnmodelData = $this->db->select('pro_model_cn_link(pml)',$join,['mod3.*'],$where);
        $cnmodelArr = [];
        foreach ($cnmodelData as $key => $row) {
            
            $cnmodelArr[$row['brand_name']][$row['make_name'].$row['mod2_name']][] = $row;
        }
        $item['cnmodel'] = $cnmodelArr;
        //查国际车型

        $join = [
            "[><]m_model(mm)" => ["pml.pml_mm_id" => "mm_id"],
            "[><]m_series(ms)" => ["mm.mm_ms_id" => "ms_id"],
            "[><]m_make(mk)" => ["mm.mm_mk_id" => "mk_id"],
        ];
        $where = [
            "pml.pml_p_id" => $p_id,
            "ORDER" => ["mk_".LG_NAME,'ms_name','mm_name'],
        ];
        $modelData = $this->db->select('pro_model_link(pml)',$join,['mk_'.LG_NAME.'(mk_name)','ms_name','mm.*'],$where);
        $modelArr = [];
        foreach ($modelData as $key => $row) {
            if(!empty($row['mm_year_from']) && !empty($row['mm_month_from'])){
                $row['year_from'] = $row['mm_year_from'].$row['mm_month_from'];
            }else if(!empty($row['mm_year_from'])){
                $row['year_from'] = $row['mm_year_from'];
            }else{
                $row['year_from'] = 0;
            }
            if(!empty($row['mm_year_to']) && !empty($row['mm_month_to'])){
                $row['year_to'] = $row['mm_year_to'].$row['mm_month_to'];
            }else if(!empty($row['mm_year_to'])){
                $row['year_to'] = $row['mm_year_to'];
            }else{
                $row['year_to'] = 0;
            }
            $modelArr[$row['mk_name']][$row['ms_name']][] = $row;
        }
        $item['model'] = $modelArr;

        // 查北美车型
        $oeModelNA = new oeModelNA();
        $namodelData = $oeModelNA->getModelList(['oe_id'=>$base['oe_id'],'orderby'=>'base_year_id DESC,base_make_name,base_model_name']);
        $namodelArr = [];
        foreach ($namodelData['rows'] as $key => $row) {
            $namodelArr[$row['base_year_id']][$row['base_make_name']][] = $row;
        }
        $item['namodel'] = $namodelArr;
        //找对应的厂商和品牌
        if($base['number']){
            $params['number'] = strtr($base['number'],['，'=>',',';'=>',','；'=>',',"\n"=>',']);
            $number = formatNums($params['number']);
            $item['searchNumber'] = $this->db->select('pro_numidx',['[><]pro_factory(fac)'=>['pn_pf_id'=>'pf_id']],['pn_p_id','pn_number(number)','fac.pf_name'],['pn_formart'=>$number,'pn_p_id'=>$p_id]);
        }
        $item = array_merge($base,$item);
        return $item;
    }

    public function getOeInfo($oe_id,$base= [])
    {   
        $item = [];

        if(!$base){
            $table = 'oe_item(oi)';
            $join = [
                "[><]pro_factory(pf)" => ["oi.oe_pf_id" => "pf_id"],
                "[><]pro_cate(cat)" => ["oi.oe_cate_id" => "id"],
            ];
            
            $fields = ['cat.id(cat_id)', 'cat.cat_pos1','cat.cat_pos2','cat.cat_pos3','cat.cat_pos4','cat.cat_pos5','cat.'.cateName().'(cat_name)', 'pf.pf_name', 'oi.*','oi.oe_'.cateName().'(oe_name)'];
            $where = ['oe_id'=>$oe_id];
            $base = $this->db->get($table,$join,$fields,$where);
            $base['pro_name'] = $base['oe_'.LG_NAME];
            $base['main_oe'] = $base['oe_oe'];
            $base['imgs'] = [];
            $join = ["[><]files"=>["pic_fileid"=>'fileid'],"[>]supplier"=>["pic_sup_id"=>"sup_id"]];
            $picrows = $this->db->select('oe_pic',$join,'*',['pic_oe_id'=>$oe_id,'ORDER'=>['pic_ismain'=>'DESC','pic_type'=>'img', 'pic_sort'=>'ASC']]);
            foreach ($picrows as  $pic) {
                if($pic['pic_type']=='img' && $pic['filetype']=='image'){
                    $pic['bigImg'] = $pic['filepath'].'/'.$pic['filebasename'].'big.'.$pic['fileextname'];
                    $pic['smallImg'] = $pic['filepath'].'/'.$pic['filebasename'].'small.'.$pic['fileextname'];
                }
                $base['imgs'][$pic['pic_type']][] = $pic;
            }
            $base['type']='oe';
            $base['id']=$oe_id;
        }

        $join = [
            "[><]files(file)"=>["pic.pic_fileid"=>"fileid"]
        ];
        $pic = $this->db->get('oe_pic(pic)',$join,'*',['pic_oe_id'=>$oe_id,'pic_ismain'=>1,'pic_type'=>'img']);
        if($pic){
            $item['bigImg'] = $pic['filepath'].'/'.$pic['filebasename'].'big.'.$pic['fileextname'];
            $item['smallImg'] = $pic['filepath'].'/'.$pic['filebasename'].'small.'.$pic['fileextname'];
        }
        $allPos = (new pro())->allPos;
        $paramArr2 = [];
        foreach ($allPos as $pos => $v) {
            if($base['cat_'.$pos] && $base['oe_'.$pos]) {
                $pos = array_intersect(explode('/',$base['oe_'.$pos]),explode(',',$base['cat_'.$pos]));
                if($pos) $paramArr2[] = ['name'=>$v['name'],'value'=>implode('/',$pos)];
            }
        }
        //查参数
        $paramArr = [];
        $fields = ['ppv_oe_id', 'ptpa_id', 'ptpa_type', 'ptpa_unit', 'ptpa_decimal', 'ppv_val_int', 'ppv_val_double', 'ppv_val_string', 'ptpa_col_order'];
        $fields = langSqlFields($fields, 'pa.', 'ptpa_', true);
        $fields = langSqlFields($fields, 'pps.', 'ppv_val_', true);
        $fields = langSqlFields($fields, 'ppsu.', 'ptpa_unit_', true);
        $sqltpl =sprintf("SELECT ".implode(',', $fields)."  FROM `oe_param_val` ov
        JOIN part_param pa ON ptpa_id = ppv_ptpa_id
        LEFT JOIN part_param_sche pps ON ((pps.pps_ptpa_id = ptpa_id AND ppv_val_string = pps.cn_name) or (pps.pps_ptpa_id = ptpa_pid and pps_id = ppv_val_int))
        LEFT JOIN part_param_sche ppsu ON ppsu.pps_ptpa_id = 0 and ptpa_unit = ppsu.cn_name
        WHERE ppv_oe_id=%d ORDER BY ptpa_pid DESC,ptpa_id ASC",$oe_id);
        $rows = $this->db->query($sqltpl)->fetchAll();
        foreach($rows as $row){
            if($row['ppv_val_int']){
                $row['ppv_val'] = $row['ppv_val_'.LG_NAME].($row['ptpa_unit_'.LG_NAME]?:$row['ptpa_unit']);
                $paramArr[] = ['name'=>$row['ptpa_'.LG_NAME],'value'=>$row['ppv_val']];
                continue;
            }
            if($row['ptpa_type']=='string'){
                $row['ppv_val'] = $row['ppv_val_'.LG_NAME];
            }elseif($row['ptpa_type']=='double'){
                $row['ppv_val'] = floatval(number_format($row['ppv_val_double'], $row['ptpa_decimal'],".",""));
            }
            $paramArr[] = ['name'=>$row['ptpa_'.LG_NAME],'value'=>$row['ppv_val'].($row['ptpa_unit_'.LG_NAME]?:$row['ptpa_unit'])];
        }

        $item['param']  = array_merge($paramArr2,$paramArr??[]);
        //查汽车品牌
        $oeTagRes = $this->db->select('oe_tag_brand(otb)',['[><]tag_brand(tb)'=>['otb.otb_tb_id'=>'tb_id']],['otb_oe_id','tb_names'=>raw('GROUP_CONCAT(tb_'.LG_NAME.' ORDER BY CONVERT(tb_'.LG_NAME.' USING gbk))')],['otb_oe_id'=>$oe_id]);

        $item['tag_brand'] = $oeTagRes['tb_names']??'';

        //查中国车型   
        $oeModelCN = new oeModelCN();
        $cnmodelData = $oeModelCN->getModelList(['oe_id'=>$oe_id,'orderby'=>'brand_initial,brand_name,make_name,mod1_name,mod2_name,mod2_start_year,mod3_name,mod3_start_year']);
        $cnmodelArr = [];
        foreach ($cnmodelData['rows'] as $key => $row) {
            
            $cnmodelArr[$row['brand_name']][$row['make_name'].$row['mod2_name']][] = $row;
        }
        $item['cnmodel'] = $cnmodelArr;
        //车型
        $oeModel = new oeModel();
        $modelData = $oeModel->getModelList(['oe_id'=>$oe_id,'orderby'=>'mk_'.LG_NAME.',ms_name,mm_name']);
      
        $modelArr = [];
        foreach ($modelData['rows'] as $key => $row) {
            $modelArr[$row['mk_name']][$row['ms_name']][] = $row;
        }
        $item['model'] = $modelArr;
        //查北美车型
        $oeModelNA = new oeModelNA();
        $namodelData = $oeModelNA->getModelList(['oe_id'=>$oe_id,'orderby'=>'base_year_id DESC,base_make_name,base_model_name']);
        $namodelArr = [];
        foreach ($namodelData['rows'] as $key => $row) {
            $namodelArr[$row['base_year_id']][$row['base_make_name']][] = $row;
        }
        $item['namodel'] = $namodelArr;
        //找对应的厂商和品牌
        if($base['number']){
            $params['number'] = strtr($base['number'],['，'=>',',';'=>',','；'=>',',"\n"=>',']);
            $number = formatNums($params['number']);
            $item['searchNumber'] = $this->db->select('oe_numidx',['[><]pro_factory(fac)'=>['on_pf_id'=>'pf_id']],['on_oe_id','on_number(number)','fac.pf_name'],['on_formart'=>$number,'on_oe_id'=>$oe_id]);
        }
        $item = array_merge($base,$item);
        return $item;
    }
}
