<?php
namespace model;
use \model\pro\cate;
use \model\pro\factory;
use \model\pro\param;
use \model\pro\paramset;
use \model\pro\pro;
use \model\carmodel;
use \model\tags;
use \model\check;
use \model\pro\numidx;
use \model\pro\promodel;
use \model\collocation;
use \model\files;
use \model\work;
use \lib\db;
class initOldData extends \model
{
	public function __construct()
    {
		parent::__construct();


	}
	
	//初始化小类、商品品牌、编码
	public function initBase()
	{
		set_time_limit(3600*24);
		$ypdb = new db(\mvc::$cfg['db']['ypdb']);
		$acts = ['cate', 'catetcd', 'para'];
		$this->db->Begin();
		$datetime = getNowTime();
		foreach($acts as $act){
			if($act == 'cate'){//小类
				$sqlArr = [
					"TRUNCATE TABLE catalog_pdc.`pro_cate`",
					"INSERT INTO catalog_pdc.`pro_cate`(id, parent_id, cn_name, en_name, py_name, sp_name, al_name, keyword, cat_from_id, cat_opuser, create_time, update_time)
					SELECT p.partid, pt.parent, t.txt part_cn, p.name part_en, t2.txt part_py, t3.txt part_sp, p.name part_al, keyword, p.partid, 'SYS', '{$datetime}', '{$datetime}' FROM ypdb.`yp_part` p 
					JOIN ypdb.yp_lng_des AS d ON p.desid = d.desid AND d.lngid = 1
					JOIN ypdb.yp_lng_text AS t ON d.txtid=t.txtid
					JOIN ypdb.yp_lng_des AS d2 ON p.desid = d2.desid AND d2.lngid = 6
					JOIN ypdb.yp_lng_text AS t2 ON d2.txtid=t2.txtid
					JOIN ypdb.yp_lng_des AS d3 ON p.desid = d3.desid AND d3.lngid = 5
					JOIN ypdb.yp_lng_text AS t3 ON d3.txtid=t3.txtid
					LEFT JOIN ypdb.`yp_part_tree` pt ON p.partid = pt.partid
					GROUP BY p.partid",
				];
				foreach($sqlArr as $sql){
					$this->db->query($sql);
				}
				$cate = new cate();
				$cate->lrtree->restructure();
			}else if($act == 'catetcd'){//商品品牌
				dump("SELECT CONCAT(\"update pro_cate set tcd_name='\", tcdname, \"' where cat_from_id=\", partid, ';') FROM (
				SELECT partid, CONCAT(';', REPLACE(GROUP_CONCAT(DISTINCT ga_name_cn), ',', ';'), ';') tcdname FROM ypdb.`yp_part_tcdga` pt
				JOIN `tecdoc_formal_2025v1`.`tof_generic_articles` ga ON pt.ga_id = ga.ga_id
				GROUP BY partid
				) t");
			}else if($act == 'para'){//商品品牌
				dump("INSERT INTO `catalog_pdc`.`part_param`(ptpa_cate_id, cn_name, en_name, py_name, sp_name, al_name, ptpa_col_order, ptpa_type, ptpa_decimal, ptpa_unit, opuser, create_time, update_time)
				SELECT pl.partid, t.txt part_cn, p.name part_en, t2.txt part_py, t3.txt part_sp, p.name part_al, seq, CASE style WHEN 2 THEN 'double' WHEN 1 THEN 'int' ELSE 'string' END TYPE, 
				CASE WHEN u.name IS NOT NULL THEN 2 ELSE 0 END de,
				CASE WHEN u.name IS NOT NULL THEN u.name ELSE '' END unit, 
				 'SYS', '2025-11-01 00:00:00', '2025-11-01 00:00:00' 
				FROM yp_para_part_label_link pl 
				JOIN `yp_para_label` p ON p.labelid = pl.labelid
				JOIN yp_lng_des AS d ON p.desid = d.desid AND d.lngid = 1
				JOIN yp_lng_text AS t ON d.txtid=t.txtid
				JOIN yp_lng_des AS d2 ON p.desid = d2.desid AND d2.lngid = 6
				JOIN yp_lng_text AS t2 ON d2.txtid=t2.txtid
				JOIN yp_lng_des AS d3 ON p.desid = d3.desid AND d3.lngid = 5
				JOIN yp_lng_text AS t3 ON d3.txtid=t3.txtid
				LEFT JOIN `yp_para_unit` u ON u.unitid = pl.unitid
				GROUP BY pl.labelid, pl.partid ORDER BY seq;
				
				
				SELECT pa.name, dispaly FROM `yp_number` num
				JOIN `yp_part` pa ON pa. partid = num.partid AND ismain = 1 WHERE  pa. partid IN (
				SELECT * FROM (
				SELECT partid FROM `yp_product` GROUP BY partid ORDER BY COUNT(*) DESC LIMIT 50
				) t
				) ORDER BY RAND() LIMIT 2000;
				
				UPDATE `part_param` SET tcd_name = cn_name;
				UPDATE `part_param` SET tcd_name = '安装位置' WHERE tcd_name = '位置';

				INSERT INTO `pro_rule_link` (prl_type, prl_pb_id, prl_val_id, prl_code_a, prl_opuser, prl_create_time, prl_update_time)
				SELECT 'cate', 1, id, LPAD(id, 3, 0), cat_opuser, create_time, update_time FROM pro_cate;
				");
			}
		}
		$this->db->End();
		return [];
	}

	//初始化商品数据（含数据单）
	function initProByExcel($file){
		$excel = new \model\excel();

		//名称对应的字段
		$nanemToField = [
			'product_id'=>'p_id',
			'OE'=>'p_oe',
			'去除后缀OE'=>'oe2',
			'去除后缀OE2'=>'oe3',
			'物料编码'=>'p_innum',
			'集团编码'=>'p_comnum',
			'产品名称'=>'p_cn_name',
			'产品英文名称'=>'p_en_name',
			'产品俄文名称'=>'p_py_name',
			'产品西语名称'=>'p_sp_name',
			'物料类型'=>'p_item_type',
			'产品所属类别'=>'p_cate',
			//'汽车品牌'=>'p_tb_id',
			'所属车型品牌'=>'p_cm_id',
			//'品牌'=>'p_pb_id',
			'基本单位'=>'p_unit',
			'车型'=>'p_model_cn_name',
			'车型（英文）'=>'p_model_en_name',
			'车型（俄文）'=>'p_model_py_name',
			'车型（西语）'=>'p_model_sp_name',
			'底盘'=>'p_chassis',
			'发动机'=>'p_engine',
			'年限'=>'p_model_year',
			'排量'=>'p_cc',
			'燃油类型'=>'p_fuel_type',
			'产品特性'=>'p_features',
			'是否内部研发'=>'p_isdevelop',
			'开发号'=>'develop_no',
			'固定货源地'=>'source_pc',
			'创建时间'=>'create_time',
		];

		$cids = [
			'p_item_type'=>1,
			'p_unit'=>2,
			'p_material'=>16,
			'p_fuel_type'=>5,
			'p_develop_status'=>17
		];
		$collArr = [];
		foreach($cids as $k=>$v){
			$rows = $this->db->select('object', ['o_id', 'cn_name'], ['o_parent_id'=>$v]);
			$collArr[$k] = array_column($rows, 'o_id', 'cn_name');
		}

		$rows = $this->db->select('pro_cate', ['id', 'cn_name']);
		$catArr = array_column($rows, 'id', 'cn_name');
		$catKvArr = array_column($rows, 'cn_name', 'id');
		
		//汽车品牌
		$rows = $this->db->select('tag_brand', ['tb_id', 'tb_cn_name', 'tb_from_ids']);
		$tbArr = [];
		$tbFArr = [];//来源ID对应
		foreach($rows as $v){
			$tbArr[$v['tb_cn_name']] = $v['tb_id'];
			foreach(explode(',', $v['tb_from_ids']) as $vv){
				$tbFArr[$vv] = $v['tb_id'];
			}
		}

		//所属车型品牌
		$rows = $this->db->select('cd_make', ['cm_id', 'cm_cn_name', 'cm_from_id']);
		$cmArr = array_column($rows, 'cm_id', 'cm_cn_name');
		$cmFArr = array_column($rows, 'cm_from_id', 'cm_cn_name');
		
		$cacheArr = [];

		//转数组
		$exrows = $excel->readOnly($file);
		$colKV = [];
		foreach($exrows[0] as $k=>$v){
			if(isset($nanemToField[$v])) $colKV[$k] = $nanemToField[$v];
		}
		unset($exrows[0]);
		$initArr = [];
		$this->db->query("TRUNCATE TABLE ztemp_init");
		foreach($exrows as $row){
			$prow = [];
			foreach($row as $kk=>$val){
				if(!isset($colKV[$kk])) continue;
				$field = $colKV[$kk];
				switch($field){
					case 'p_cate': 
						if($val == '') $val = '固定资产';
						if(!empty($catArr[$val])){
							$prow[$field] = $catArr[$val];
							$prow['cat_name'] = $val; 
						}else{
							dd($row, $field.'=>'.$val.'#匹配失败');
						}
					break;
					case 'p_tb_id': 
						if(!empty($tbArr[$val])){
							$prow[$field] = $tbArr[$val];
						}else if($tbFArr[$cmFArr[$val]]) {
							$prow[$field] = $tbFArr[$cmFArr[$val]];
						}else{
							dd($row, $field.'=>'.$val.'#匹配失败');
						}
					break;
					case 'p_cm_id': 
						if(!empty($cmArr[$val])){
							$prow[$field] = $cmArr[$val];
						}else if($val){
							dd($row, $field.'=>'.$val.'#匹配失败');
						}
					break;
					case 'p_isdevelop': $prow[$field] = $val == '是'? 1: 0; break;
					case 'p_item_type': 
					case 'p_unit': 
					case 'p_fuel_type': 
						if($val != ''){
							if(isset($collArr[$field][$val])){
								$prow[$field] = $collArr[$field][$val];
							}else{
								dd($row, $field.'=>'.$val.'#匹配失败');
							}
						}else{
							$prow[$field] = 0;
						}
					break;
					case 'source_pc': 
						if($val != ''){
							if(stripos($val, '广州') !== false){
								$prow['p_source_province_id'] = 19;
								$prow['p_source_city_id'] = 1901;
							}else if(stripos($val, '新疆') !== false){
								$prow['p_source_province_id'] = 31;
								$prow['p_source_city_id'] = 0;
							}else{
								dd($row, $field.'=>'.$val.'#匹配失败');
							}
						}else{
							$prow['p_source_province_id'] = 0;
							$prow['p_source_city_id'] = 0;
						}
					break;
					default:
						$prow[$field] = $val;
					break;
				}
			}
			if($prow['p_id']) $prow['p_from_id'] = $prow['p_id'];
			$initArr[] = ['z_data'=>json_encode($prow, JSON_UNESCAPED_UNICODE)];
			if(count($initArr) == 100){
				$this->db->insert('ztemp_init', $initArr);
				$initArr = [];
			}
		}
		if($initArr) $this->db->insert('ztemp_init', $initArr);
		return [];
	}
	
	//缓存入库
	function initProToDB($count = 10000){
		$pro = new pro();
		$work = new work();
		$datetime = getNowTime();
		$wdi_from = 1116;
		//按类别入库
		$okArr = []; $noArr = [];
		if(empty($count)) $count = 10000;
		for($i = $count; $i > 0; $i--){
			$sql = "SELECT * FROM ztemp_init where z_status =0 order by rand() limit 1";
			//$sql = "SELECT * FROM ztemp_init where z_status =0 limit 1";
			$zrow = $this->db->query($sql)->fetch(\PDO::FETCH_ASSOC);
			if(empty($zrow)) break;
			$prow = json_decode($zrow['z_data'], true);
			try {
				$haspro = $this->db->get('pro', 'p_id', ['p_from_id'=>$prow['p_from_id']]);
				
				$this->db->Begin();
				$prow['p_comnum_format'] = formatNum($prow['p_comnum']);
				$prow['p_innum_format'] = formatNum($prow['p_innum']);
				$prow['p_oe_format'] = formatNum($prow['p_oe']);
				$prow['oe2_format'] = formatNum($prow['oe2']);
				$prow['oe3_format'] = formatNum($prow['oe3']);
				$prow['p_seqno'] = substr($prow['p_comnum'], 6, 3);
				if(empty($prow['p_comnum_format']) || empty($prow['p_oe']) || 
					$prow['p_comnum_format'] != $prow['p_innum_format']
				){
					$this->db->rollBack();
					$noArr[] = ['p_id'=>$prow['p_id'], 'p_innum'=>$prow['p_innum']];
					$this->db->update('ztemp_init', ['z_status'=>-1], ['z_id'=>$zrow['z_id']]);
					continue;
				}
				
				$create_time = $datetime;
				if($prow['create_time']) $create_time = date('Y-m-d H:i:s', strtotime($prow['create_time']));

				$prow['p_pf_id'] = 1;
				$prow['p_pb_id'] = 1;
				$prow['p_opuser'] = 'SYS';
				$prow['p_update_time'] = $datetime;
				$add = array_filter($prow, function ($key) {
					return strpos($key, 'p_') === 0;
				}, ARRAY_FILTER_USE_KEY);

				if($haspro){//更新
					$this->db->update('pro', $add, ['p_id'=>$haspro]);
					$p_id = $haspro;
				}else{//新增
					$add['p_create_time'] = $create_time;
					$this->db->insert('pro', $add);
					$p_id = $this->db->id();
					if(empty($p_id)){
						$this->db->rollBack();
						dump('导入失败', $prow);
						continue;
					}
				}
				$okArr[] = ['p_id'=>$p_id, 'p_innum'=>$prow['p_innum']];
				$add = array_filter($prow, function ($key) {
					return strpos($key, 'pe_') === 0;
				}, ARRAY_FILTER_USE_KEY);
				$add['pe_opuser'] = 'SYS';
				$add['pe_update_time'] = $datetime;
				if($haspro){//更新
					$this->db->update('pro_ext', $add, ['pe_p_id'=>$p_id]);
				}else{
					$add['pe_p_id'] = $p_id;
					$add['pe_create_time'] = $create_time;
					$this->db->insert('pro_ext', $add);
				}
				
				//开发号
				if($haspro) $this->db->delete('pro_developno', ['pde_p_id'=>$p_id]);
				
				if(!empty($prow['develop_no'])){
					$this->db->insert('pro_developno', ['pde_p_id'=>$p_id, 'pde_number'=>$prow['develop_no'], 'pde_format'=>formatNum($prow['develop_no'])]);
				}

				//号码表
				$addNums = [
					[
						'pn_p_id'=>$p_id,
						'pn_is_sys'=>1,
						'pn_pf_id'=>3,
						'pn_number'=>$prow['p_innum'],
						'pn_formart'=>$prow['p_innum_format'],
						'pn_ismain'=>0,
						'opuser'=>'SYS',
						'create_time'=>$datetime,
						'update_time'=>$datetime
					],
					[
						'pn_p_id'=>$p_id,
						'pn_is_sys'=>1,
						'pn_pf_id'=>2,
						'pn_number'=>$prow['p_comnum'],
						'pn_formart'=>$prow['p_comnum_format'],
						'pn_ismain'=>0,
						'opuser'=>'SYS',
						'create_time'=>$datetime,
						'update_time'=>$datetime
					]
				];

				if($prow['p_oe_format']){
					$addNums[] = [
						'pn_p_id'=>$p_id,
						'pn_is_sys'=>0,
						'pn_pf_id'=>1,
						'pn_number'=>$prow['p_oe'],
						'pn_formart'=>$prow['p_oe_format'],
						'pn_ismain'=>1,
						'opuser'=>'SYS',
						'create_time'=>$datetime,
						'update_time'=>$datetime
					];
				}
				
				if($prow['oe2_format'] && $prow['p_oe_format'] != $prow['oe2_format']){
					$addNums[] = [
						'pn_p_id'=>$p_id,
						'pn_is_sys'=>0,
						'pn_pf_id'=>1,
						'pn_number'=>$prow['oe2'],
						'pn_formart'=>$prow['oe2_format'],
						'pn_ismain'=>0,
						'opuser'=>'SYS',
						'create_time'=>$datetime,
						'update_time'=>$datetime
					];
				}

				if($prow['oe3_format'] && $prow['p_oe_format'] != $prow['oe3_format'] && $prow['oe2_format'] != $prow['oe3_format']){
					$addNums[] = [
						'pn_p_id'=>$p_id,
						'pn_is_sys'=>0,
						'pn_pf_id'=>1,
						'pn_number'=>$prow['oe3'],
						'pn_formart'=>$prow['oe3_format'],
						'pn_ismain'=>0,
						'opuser'=>'SYS',
						'create_time'=>$datetime,
						'update_time'=>$datetime
					];
				}

				if($haspro){//更新
					foreach($addNums as $key=>$add){
						$uniwhere = [
							'pn_p_id'=>$add['pn_p_id'],
							'pn_is_sys'=>$add['pn_is_sys'],
							'pn_pf_id'=>$add['pn_pf_id'],	
							'pn_formart'=>$add['pn_formart']
						];
						$exists = $this->db->get('pro_numidx', 'pn_id', $uniwhere);
						if($exists) unset($addNums[$key]);
					}
					$addNums = array_values($addNums);
				}
				if($addNums) $this->db->insert('pro_numidx', $addNums);
				if(!$haspro){//数据单、零件库、清洗
					$wdlist_title = $prow['cat_name'].'[初始化]';
					$wdlist_id = $this->db->get('work_data_list', 'wdlist_id', ['wdlist_title'=>$wdlist_title]);
					if(empty($wdlist_id)){
						$wdl = [
							'wdlist_seq'=>$work->getWorkSeqNext(),
							'wdlist_from_opuser'=>'SYS',
							'wdlist_title'=>$wdlist_title,
							'wdlist_opuser'=>'SYS',
							'wdlist_create_time'=>$datetime,
							'wdlist_update_time'=>$datetime,
							'wdlist_from'=>$wdi_from
						];
						$this->db->insert('work_data_list', $wdl);
						$wdlist_id = $this->db->id();
					}

					$join = [
						"[><]work_data_item(wdi)" => ["wdif.wdif_wdi_id" =>"wdi_id"]
					];
					$where = ['wdi_wdlist_id'=>$wdlist_id, 'wdi_cat_id'=>$prow['p_cate'], 'wdif_type'=>'Number', 'wdif_search'=>$prow['p_oe_format'], 'wdif_pf_id'=>$prow['p_pf_id']];
					if($prow['p_oe_format']){
						$where['wdif_search'] = $prow['p_oe_format'];
					}else{
						$where['wdif_val'] = $prow['p_oe'];
					}
					
					$wdi_id = $this->db->get('work_data_item_format(wdif)', $join, 'wdif_wdi_id', $where);
					$oe_id = 0;
					if(empty($wdi_id)){
						$add = [
							'wdi_wdlist_id'=>$wdlist_id,
							'wdi_cat_id'=>$prow['p_cate'],
							'wdi_from'=>$wdi_from,
							'wdi_from_id'=>$p_id,
							'wdi_opuser'=>'SYS',
							'wdi_create_time'=>$datetime,
							'wdi_update_time'=>$datetime
						];
						$this->db->insert('work_data_item', $add);
						$wdi_id = $this->db->id();
						$add = [
							'wdif_wdi_id'=>$wdi_id,
							'wdif_type'=>'Number',
							'wdif_val'=>$prow['p_oe'],
							'wdif_search'=>$prow['p_oe_format'],
							'wdif_pf_id'=>$prow['p_pf_id']
						];
						$this->db->insert('work_data_item_format', $add);
						//去除后缀的OE号
						if($prow['oe2_format'] && $prow['p_oe_format'] != $prow['oe2_format']){
							$add = [
								'wdif_wdi_id'=>$wdi_id,
								'wdif_type'=>'Number',
								'wdif_val'=>$prow['oe2'],
								'wdif_search'=>$prow['oe2_format'],
								'wdif_pf_id'=>1
							];
							$this->db->insert('work_data_item_format', $add);
						}
						if($prow['oe3_format'] && $prow['p_oe_format'] != $prow['oe3_format'] && $prow['oe2_format'] != $prow['oe3_format']){
							$add = [
								'wdif_wdi_id'=>$wdi_id,
								'wdif_type'=>'Number',
								'wdif_val'=>$prow['oe3'],
								'wdif_search'=>$prow['oe3_format'],
								'wdif_pf_id'=>1
							];
							$this->db->insert('work_data_item_format', $add);
						}
					}else{
						$oe_id = $this->db->get('oe_item', 'oe_id', ['oe_wdi_id'=>$wdi_id]);
					}
					
					if(empty($oe_id)){
						//清洗数据单
						$work->cleanWorkData(['ids'=>$wdi_id]);
						//转零件库
						$oeids = $work->workItemToPoeItem(['ids'=>$wdi_id]);
						$oe_id = $oeids[0];
						if($oe_id){
							//零件数据使用第一个商品数据
							$sql = "UPDATE `pro`, `oe_item` SET oe_unit = p_unit,
								oe_cn_name = p_cn_name,
								oe_en_name = p_en_name,
								oe_py_name = p_py_name,
								oe_sp_name = p_sp_name,
								oe_model_cn_name=p_model_cn_name, 
								oe_model_en_name=p_model_en_name, 
								oe_model_py_name=p_model_py_name, 
								oe_model_sp_name=p_model_sp_name, 
								oe_chassis=p_chassis, 
								oe_engine= p_engine, 
								oe_fuel_type = p_fuel_type, 
								oe_cc =p_cc, 
								oe_model_year = p_model_year, 
								oe_isdevelop = p_isdevelop
								WHERE p_id={$p_id} and oe_id={$oe_id}";
							$this->db->query($sql);
							if(!empty($prow['develop_no'])){
								$this->db->insert('oe_item_developno', ['oid_oe_id'=>$oe_id, 'oid_number'=>$prow['develop_no'], 'oid_format'=>formatNum($prow['develop_no'])]);
							}
						}
					}
					
					if($oe_id){
						$this->db->update('pro', ['p_oe_id'=>$oe_id], ['p_id'=>$p_id]);
						//零件库转商品
						$pro->updateProByPoe($p_id, $oe_id);
					}
				}
				$this->db->update('ztemp_init', ['z_status'=>1], ['z_id'=>$zrow['z_id']]);
				$this->db->End();
			}catch (Exception $e) {
				$this->db->rollBack();
				$noArr[] = ['p_id'=>$prow['p_id'], 'p_innum'=>$prow['p_innum']];
				$this->db->update('ztemp_init', ['z_status'=>-1], ['z_id'=>$zrow['z_id']]);
				dump($prow, $e->getMessage());
			}
		}

		//填补p_oe_id为空的
		/*$pro = new pro();
		$rows = $this->db->select('pro', ['p_id', 'p_oe_format', 'p_oe', 'p_cate'], ['p_oe_id'=>0, 'p_create_time'=>$datetime]);
		foreach($rows as $row){
			$p_id = $row['p_id'];
			$where = ['oe_cate_id'=>$row['p_cate'], 'on_pf_id'=>1];
			if($row['p_oe_format']){
				$where['on_formart'] = $row['p_oe_format'];
			}else{
				$where['on_number'] = $row['p_oe'];
			}
			$oe_id = $this->db->get('oe_numidx(oen)', ["[><]oe_item(oe)" => ["oen.on_oe_id" =>"oe_id"]], 'oe_id', $where);
			if($oe_id){
				$this->db->update('pro', ['p_oe_id'=>$oe_id], ['p_id'=>$p_id]);
				$pro->updateProByPoe($p_id, $oe_id);
			}
		}*/

		$sqlArr = [
			//"UPDATE `pro_cate` SET is_engine = 1 WHERE id IN (SELECT DISTINCT p_cate FROM `pro` WHERE p_engine != '') and is_engine != 1",
			//零件开发号
			"TRUNCATE TABLE oe_item_developno",
			"INSERT INTO oe_item_developno(oid_oe_id, oid_number, oid_format, oid_sup_id)
			SELECT p_oe_id, pde_number, pde_format, pde_sup_id FROM `pro_developno` JOIN pro ON pde_p_id=p_id
			GROUP BY p_oe_id, pde_format",
			"UPDATE `pro`, `oe_item` SET p_para = oe_para WHERE p_oe_id = oe_id and p_create_time='{$datetime}'",
			"UPDATE oe_item SET ck1 = 1, ckuser1= 'SYS', cktime1='{$datetime}' where ck1 = 0 or ck1 is null and oe_opuser='SYS'"
		];
		$this->db->Begin();
		foreach($sqlArr as $sql){
			$this->db->query($sql);
		}
		$this->db->End();
		return ['ok'=>$okArr, 'no'=>$noArr];
	}

	function initProPic($count = 10000){
		$pro = new pro();
		if(empty($count)) $count = 10000;
		$okArr = []; $noArr = [];
		for($i = $count; $i > 0; $i--){
			$sql = "SELECT * FROM (SELECT p_id, p_comnum, p_innum FROM pro where p_pb_id=1 and temp_pic_init=0 limit 1000) t order by rand() limit 1";
			$zrow = $this->db->query($sql)->fetch(\PDO::FETCH_ASSOC);
			if(empty($zrow)) break;
			try {
				$btime = microtime(true);
				$this->db->update('pro', ['temp_pic_init'=>2], ['p_id'=>$zrow['p_id'],'temp_pic_init'=>0]);
				echo $zrow['p_id']."=>begin\r\n";
				$data = $pro->synPic($zrow['p_id']);
				if(is_array($data)){
					$pro->syncOePicToPro($zrow['p_id']);
					$this->db->update('pro', ['temp_pic_init'=>1], ['p_id'=>$zrow['p_id']]);
					$okArr[] = $zrow['p_id'];
				}
				echo ceil((microtime(true) - $btime)*1000)."ms \r\n";
			}catch (Exception $e) {
				$noArr[] = $zrow['p_id'];
				$this->db->update('pro', ['temp_pic_init'=>-1], ['p_id'=>$zrow['p_id'],'temp_pic_init'=>0]);
				dump($zrow, $e->getMessage());
			}
		}
		return ['ok'=>$okArr, 'no'=>$noArr];
	}

	/*function syncOePicToPro(){
		$pro = new pro();
		$rows = $this->db->select('pro', ['p_id'], ['p_pb_id'=>1]);
		foreach($rows as $row){
			$pro->syncOePicToPro($row['p_id']);
		}
		return [];
	}*/

	function initCompanyPic($count)
	{	
		$pro = new pro();
		if(empty($count)) $count = 10000;
		$okArr = []; $noArr = [];
		for($i = $count; $i > 0; $i--){
			$sql = "SELECT * FROM (SELECT p_id, p_comnum, p_innum FROM pro where p_pb_id!=1 and temp_pic_init=0 limit 1000) t order by rand() limit 1";
			$zrow = $this->db->query($sql)->fetch(\PDO::FETCH_ASSOC);
			if(empty($zrow)) break;
			$btime = microtime(true);
			try {
				$btime = microtime(true);
				$this->db->update('pro', ['temp_pic_init'=>2], ['p_id'=>$zrow['p_id'],'temp_pic_init'=>0]);
				echo $zrow['p_id']."=>begin\r\n";
				$data = $pro->synCompanyPic($zrow['p_id']);
				if(is_array($data)){
					$this->db->update('pro', ['temp_pic_init'=>1], ['p_id'=>$zrow['p_id']]);
					$okArr[] = $zrow['p_id'];
				}
			}catch (Exception $e) {
				$noArr[] = $zrow['p_id'];
				$this->db->update('pro', ['temp_pic_init'=>-1], ['p_id'=>$zrow['p_id'],'temp_pic_init'=>0]);
				dump($zrow, $e->getMessage());
			}
			echo $zrow['p_id'].'=>'.ceil((microtime(true) - $btime)*1000)."ms \r\n";
		}
		return ['ok'=>$okArr, 'no'=>$noArr];
	}
	
	//初始化OE汽车品牌
	function initOeNumBrand()
	{
		$oeNumidx = new \model\oeNumidx();
		$zrow = $this->db->select('oe_numidx', ['on_id', 'on_oe_id', 'on_formart', 'on_mk_id'], ['on_pf_id'=>1, 'on_opuser'=>'SYS']);
		$oeids = array_unique(array_column($zrow, 'on_oe_id'));
		$this->db->Begin();
		foreach($zrow as $row){
			$tbIds = [];
			$row['on_mk_id'] = trim($row['on_mk_id'], ',');
			if(!empty($row['on_mk_id'])){
				$ids = $this->db->select('tag_brand_make', 'tbm_tb_id', ['tbm_mk_id'=>explode(',', $row['on_mk_id'])]);
				if($ids) $tbIds = $ids;
			}else{
				$ypApi = new ypApi();
				$res = $ypApi->Get('etk/getNumberBrand', ['number'=>$row['on_formart']]);
				if($res['data']){
					$names = $res['data'];
					$namesstr = implode("','", $names);
					$sql = "SELECT DISTINCT tb_id FROM `tag_brand` WHERE tb_cn_name IN ('{$namesstr}') OR tb_en_name IN ('{$namesstr}') 
					OR tb_id IN (SELECT DISTINCT tbm_tb_id FROM tag_brand_cnbrand JOIN m_cn_model ON brand_id = tbm_brand_id WHERE brand_name IN ('{$namesstr}'))
					OR tb_id IN (SELECT DISTINCT tbm_tb_id FROM tag_brand_make JOIN m_make ON mk_id = tbm_mk_id WHERE mk_cn_name IN ('{$namesstr}') OR mk_en_name IN ('{$namesstr}'))";
					$vals = $this->db->query($sql)->fetchAll();
					if($vals) $tbIds = array_column($vals, 'tb_id');
				}
			}
			$oeNumidx->saveOeNumTb($row['on_oe_id'], $row['on_id'],$tbIds);
		}
		
		$pro = new pro();
		foreach($oeids as $oe_id){
			$pro->synProByOe($oe_id, ['nums']);
		}
		$this->db->End();
		return ['ok'];
	}

	function clearNotExistsPic()
	{
		$sql = 'SELECT fileid, filename FROM `oe_pic` JOIN `files` ON fileid = pic_fileid';
		$rows = $this->db->query($sql)->fetchAll();
		foreach($rows as $row){
			$file = \mvc::$cfg['dir']['files'].'/'.$row['filename'];
            if(!file_exists($file)){
                $this->db->delete('oe_pic',['pic_fileid'=>$row['fileid']]);
            }
		}

		$sql = 'SELECT fileid, filename FROM `pro_pic` JOIN `files` ON fileid = pic_fileid';
		$rows = $this->db->query($sql)->fetchAll();
		foreach($rows as $row){
			$file = \mvc::$cfg['dir']['files'].'/'.$row['filename'];
            if(!file_exists($file)){
                $this->db->delete('pro_pic',['pic_fileid'=>$row['fileid']]);
            }
		}
		$this->db->query("UPDATE oe_item SET oe_pic = 0 WHERE oe_pic NOT IN (SELECT pic_fileid FROM oe_pic)");
		$this->db->query("UPDATE pro SET p_pic = 0 WHERE p_pic NOT IN (SELECT pic_fileid FROM pro_pic)");
	}
}
