<?php
class partAction extends baseAction
{
	/*
	零件管理首页
	 */
	function index()
	{
        LibRule::Check('SO01');
		$Params = MVC::$URL_PARAMS;
		$B2cPart=new B2cPart();
		if(!empty($Params['keyword']))
		{
			$word = LibFc::Escape($Params['keyword']);
			$table = 'bc_part p join bc_part_tree on pt_part_id=p.part_id left join bc_part pp on pt_parent_part_id = pp.part_id';
			$res = $B2cPart->Get($table,['p.*, pp.part_name part_name_p'], sprintf(" and (p.part_name like '%%%s%%' or p.part_keyword like '%%%s%%') order by pt_seq, pt_parent_part_id, p.part_name", $word, $word));
			LibTpl::Set('searchList', $res['data']);
		}
		
		$resultData=$B2cPart->Get('bc_part_tree left join bc_part on pt_part_id=part_id',['*'],' and pt_parent_part_id != 4161 order by pt_seq asc');
		$id=array();
		foreach ($resultData['data'] as $k => $v) 
		{
			if($v['part_is_end']>0)
			{
				$id[]=$v['pt_part_id'];
			}
			$resultData['data'][$k]['end']=$v['part_is_end']>0 ? '末级' : '否'; 
		}
		if(count($id))
		{
			$dTotal=$B2cPart->Get('bc_product',['count(*) count ,pro_part_id'],' group by pro_part_id');
			$dTotal = array_column($dTotal['data'], 'count','pro_part_id');
			LibTpl::Set('dTotal', $dTotal);

			//获取参数标签
			$res=$B2cPart->get('bc_part_param_link left join bc_param_label on pal_id=ppl_pal_id left join bc_param_unit on pau_id=ppl_pau_id left join bc_param_value on pav_pal_id=ppl_pal_id',['ppl_part_id','ppl_pal_id','ppl_pau_id','ppl_style','pal_name','pau_name','pav_value'],sprintf(' and ppl_part_id in (%s) order by ppl_seq asc','select pt_part_id from bc_part_tree left join bc_part on pt_part_id=part_id'));
		
			$paramArr=[];
			foreach ($res['data'] as $v) 
			{
				$paramArr[$v['ppl_part_id']][$v['pal_name']][]=$v['pav_value'];
			}
			LibTpl::Set('paramArr',$paramArr);
		}
		foreach ($resultData['data'] as $k => $v) 
		{
			$resultData['data'][$k]['productCount']=isset($dTotal[$v['pt_part_id']])? $dTotal[$v['pt_part_id']] : 0;
		}

		//子类
		$res = $B2cPart->Get('bc_part_small',['*'],' order by pas_seq asc');
		$smallPart = [];
		foreach($res['data'] as $v)
		{
			$smallPart[$v['pas_part_id']][] = $v['pas_name'];
		}

		$partData=$B2cPart->getPartTree($resultData['data']);
		LibTpl::Set('Params', $Params);
		LibTpl::Set('smallPart', $smallPart);
		LibTpl::Set('treeData', $partData['data']);
		LibTpl::Set('title','零件管理-跑街的');
		LibTpl::Put();
	}
	/*
	获取树视图json数据
	 */
	function getTreeJson()
	{
		
		LibFc::ajaxJsonEncode($partData['data']);	
	}
	/*
	零件修改页面
	 */
	function editPart()
	{
		LibRule::Check('SO03');
		$Params = MVC::$URL_PARAMS;
		$PartId = !empty($Params['partId'])? (int) $Params['partId']: 0;
		if($PartId > 0)
		{
			$B2cPart=new B2cPart();
			$Res = $B2cPart->Get('bc_part', ['*'], ' and part_id='.$PartId,true);
			$PartArr = $Res['data'];
			if(!empty($PartArr))
			{	
				//子类
				$res = $B2cPart->Get('bc_part_small',['*'], sprintf(' and pas_part_id=%d order by pas_seq asc', $PartId));
				LibTpl::Set('smallPartArr', $res['data']);
				
				//父亲
				$Res=$B2cPart->Get('bc_part_tree',['distinct pt_parent_part_id','pt_ismain'],' and pt_part_id='.$PartId);
				$ParentArr = $Res['data'];
				// print_r($ParentArr);
				//获取所有不是最后一级并且不是$PartId的零件 自动完成功能
				$where=sprintf(' and pt_level<3 and pt_part_id!=%d and part_is_end=0',$PartId);
				$data=$B2cPart->getPartsByCondition(array('part_id','part_name'),$where);
				foreach ($data['data'] as $key => $value) 
				{
					$AutoPartArr[]=array('partid'=>$value['part_id'],'name'=>$value['part_name']);
					$Sort[] = $value['part_name'];
				}
				//按照字母排序
				array_multisort($Sort, SORT_ASC, $AutoPartArr);				
				$AutoPartArr[] = array('partid'=>0, 'name'=>'顶级分类');
				foreach($AutoPartArr as $V)
				{
					foreach($ParentArr as $KK=>$VV)
					{
						if($VV['pt_parent_part_id'] == $V['partid'])
						{
							$ParentArr[$KK]['name'] = $V['name'];
						}
					}
				}
				if($PartArr['part_is_end'] > 0)
				{//末级,找零件参数
					//无默认值的参数

					$table = 'bc_part_param_link join bc_param_label on ppl_pal_id=pal_id left join bc_param_unit on ppl_pau_id = pau_id';
					$res = $B2cPart->get($table, ['*'], sprintf(" and ppl_part_id = %d order by ppl_seq", $PartId));
					$ParaArr = $res['data'];
					$palProCount = [];
					$palIdArr = array_column($ParaArr, 'pal_id');
					if(!empty($palIdArr))
					{
						$res = $B2cPart->Get('bc_product_param_string', ['pps_pal_id as pal_id, count(distinct pps_pro_id) as pro_count'], sprintf(" and pps_pal_id in (%s) group by pps_pal_id", implode(',', $palIdArr)));
						$palProCount = array_column($res['data'], 'pro_count', 'pal_id');

						$res = $B2cPart->Get('bc_product_param_float', ['ppf_pal_id as pal_id, count(distinct ppf_pro_id) as pro_count'], sprintf(" and ppf_pal_id in (%s) group by ppf_pal_id", implode(',', $palIdArr)));
						foreach($res['data'] as $v)
						{
							$palProCount[$v['pal_id']] = $v['pro_count'];
						}
					}
					
					//所有单位名称
					$AllUnitArr = [['pau_id'=>0, 'pau_name'=>'----']];
					$Res = $B2cPart->Get('bc_param_unit',array('pau_id', 'pau_name'));
					$AllUnitArr = array_merge($AllUnitArr, $Res['data']);
				}
				
				
				$res = $B2cPart->partModelFiled();
				LibTpl::Set('partModelFiled', $res['data']);
				$PartArr['part_model_fileds'] = explode(',', $PartArr['part_model_fileds']);
				LibTpl::Set('title','修改零件-跑街的');			
				LibTpl::Set('palProCount', $palProCount);
				LibTpl::Set('PartArr', $PartArr);
				LibTpl::Set('ParaArr', $ParaArr);
				LibTpl::Set('AllUnitArr', $AllUnitArr);
				LibTpl::Set('AutoPartArr', $AutoPartArr);
				LibTpl::Set('ParentArr', $ParentArr);
				LibTpl::Set('PageTitle', '编辑零件：'.$PartArr['lng'][$PartArr['desid']][1].'('.$PartArr['lng'][$PartArr['desid']][2].')');
				LibTpl::Put();
			}
			else
			{
				LibTpl::Error('URL提供的零件ID不存在！');
			}
		}
		else
		{
			LibTpl::Error('URL提供的零件ID不正确！');
		}
		
	}
	/*
	添加零件页面
	 */
	function addPart()
	{
		LibRule::Check('SO02');
		$Params = MVC::$URL_PARAMS;
		$B2cPart=new B2cPart();
		$pPart=isset($Params['pPart'])?$Params['pPart']:0;
		$where=' and part_is_end=0 order by part_name asc';
		$data=$B2cPart->getPartsByCondition(array('distinct part_id','part_name'),$where);
		foreach ($data['data'] as $key => $value) 
		{
			if($value['part_id']==$pPart)
			{
				$pPartName=$value['part_name'];
			}
			$AutoPartArr[]=array('partid'=>$value['part_id'],'name'=>$value['part_name']);
		}
		LibTpl::Set('pPartName',$pPartName);
		$res = $B2cPart->partModelFiled();
		LibTpl::Set('partModelFiled', $res['data']);
		LibTpl::Set('pPart',$pPart);
		LibTpl::Set('AutoPartArr',$AutoPartArr);
		LibTpl::Set('title','添加零件-跑街的');
		LibTpl::Put();
	}
	/*
	添加零件处理
	 */
	function PartAddOk()
	{
		$baseArr = $_POST['base'];
		if(!empty($baseArr['part_name']))
		{
			$B2cPart=new B2cPart();
			$ParentArr = isset($_POST['Parent'])?$_POST['Parent']:[0];
			$baseArr['part_model_fileds'] = empty($_POST['model_fileds'])? '': implode(',', $_POST['model_fileds']);
			$baseArr['IsMain'] = $_POST['IsMain'];
			$Result = $B2cPart->AddPart($baseArr, $ParentArr);
			$PartId = $Result['data'];
			LibTpl::Success('添加成功，该零件的ID为'.$PartId,  mvc::$cfg['ADMIN_URI'].'part/editPart?partId='.$PartId);
		}
		else
		{
			LibTpl::Error('获取数据失败或者参数不正确！');
		}
	}
	/*
	修改零件处理
	 */
	function partParaSetOk()
	{
		$PartId = !empty($_POST['PartId'])? (int)$_POST['PartId']:0;
		if($PartId > 0)
		{
			$B2cPart=new B2cPart();
			$B2cPart->setPartPara($PartId, empty($_POST['para'])? []: $_POST['para']);
			$B2cPart->setPartSmallPart($PartId, empty($_POST['spart'])? []: $_POST['spart']);
			LibTpl::Success('保存成功',  mvc::$cfg['ADMIN_URI'].'part/editPart?partId='.$PartId);
		}
		else
		{
			LibTpl::Error('获取数据失败或者参数不正确！');
		}
	}
	/*
	ajax检验零件删除
	 */
	function ajaxCheckPartDel()
	{
		LibRule::Check('SO04');
		$PartId = !empty($_POST['PartId'])? LibFc::Int($_POST['PartId']): 0;
		if($PartId>0)
		{
			$B2cPart=new B2cPart();
			$res=$B2cPart->delPart($PartId);
			LibFc::ajaxJsonEncode($res);
		}
		LibFc::ajaxJsonEncode(array('status'=>false,'data'=>'获取数据失败或者参数不正确！'));
	}
	/*
	修改零件提交处理
	 */
	function partSetOk()
	{
		$PartId = !empty($_POST['PartId'])? (int)$_POST['PartId']:0;
		$baseArr = $_POST['base'];
		if(!empty($baseArr['part_name']) && $PartId > 0)
		{
			$B2cPart=new B2cPart();
			$IsEnd = (int) $baseArr['part_is_end'];
			$ParentArr = $_POST['Parent'];
			$MainParent = $_POST['IsMain'];
			$baseArr['part_model_fileds'] = empty($_POST['model_fileds'])? '': implode(',', $_POST['model_fileds']);
			//非末级，检测是否有产品挂在此类
			if(empty($IsEnd))
			{
				$res = $B2cPart->get('bc_product', ['count(*) count'], sprintf(" and pro_part_id =%d", $PartId), true);
				if(!empty($res['data']['count']))
					LibTpl::Error('有'.$res['data']['count'].'个产品挂在此分类，不允许变为非末级分类');
			}
			$B2cPart->setPartBasic($PartId, $baseArr);
			$B2cPart->setPartTree($PartId, $ParentArr, $IsEnd, $MainParent);
			LibTpl::Success('修改成功。');
		}
		else
		{
			LibTpl::Error('获取数据失败或者参数不正确！');
		}
	}
	/*
	零件名唯一性校验
	 */
	function checkPartName()
	{
		$Params = MVC::$URL_PARAMS;
		if(!empty($_POST['partName']) && isset($_POST['IsEnd']))
		{
			$IsEnd = ($_POST['IsEnd']==1)?1:0;
			$B2cPart = new B2cPart();
			$Result = $B2cPart->checkPart(array('part_name'=>$_POST['partName'],'part_is_end'=>$IsEnd), $_POST['PartId']);
			LibFc::ajaxJsonEncode($Result);
		}
	}
		/*
	*如果不是末级则验证产品数量
	*/
	function ajaxGetPartProCount()
	{
		if(!empty($_POST['PartId']))
		{
			$B2cPart=new B2cPart();
			$Res = $B2cPart->getProCount($_POST['PartId']);
			LibFc::ajaxJsonEncode($Res);
		}
	}
	/*
	*如果是末级则验证子零件个数
	*/
	function ajaxGetChildPartCount()
	{
		if(!empty($_POST['PartId']))
		{
			$B2cPart=new B2cPart();
			$Res =$B2cPart->getPartByPid($_POST['PartId']);
			LibFc::ajaxJsonEncode(array('status'=>true,'data'=>count($Res['data'])));
		}
	}
	/**
	 * @method    首页配件列表管理
	 * @author 卢
	 * @copyright 2017-11-10
	 */
	function managePart()
	{
		LibRule::Check('FS01');
		$B2cPart=new B2cPart();
		$file=mvc::$cfg['ROOT'].'home/config/indexPart.php';
		if($_SERVER['REQUEST_METHOD']=='POST')
		{
			LibRule::Check('FS03');
			// print_r($_POST);
			// die;
			$data=[];
			if(count($_POST['name1']))
			{
				foreach ($_POST['name1'] as $k => $v) 
				{
					$data['PA'.$k]['name']=$v;
					$data['PA'.$k]['seq']=$_POST['seq1'][$k]?:999;
					if(isset($_POST['name2'][$k]))
					{
						foreach ($_POST['name2'][$k] as $i => $j) 
						{
							$data['PA'.$k]['part'][$i]['name']=$_POST['name2'][$k][$i];
							$data['PA'.$k]['part'][$i]['seq']=$_POST['seq2'][$k][$i]?:999;
							if(isset($_POST['level3'][$k][$i]))
							{
								foreach ($_POST['level3'][$k][$i] as $g => $h) 
								{
									$data['PA'.$k]['part'][$i]['PB'][$g]['id']=$h;
									$data['PA'.$k]['part'][$i]['PB'][$g]['seq']=$_POST['seq3'][$k][$i][$g]?:999;
								}
							}
							else
							{
								$data['PA'.$k]['part'][$i]['PB']=[];
							}
							$sort3=array_column($data['PA'.$k]['part'][$i]['PB'], 'seq');
							array_multisort($sort3,SORT_ASC,$data['PA'.$k]['part'][$i]['PB']);
							// $data['PA'.$k]['part'][$i]['PB']=isset($_POST['level3'][$k][$i])?$_POST['level3'][$k][$i]:[];
						}
						$sort2=array_column($data['PA'.$k]['part'], 'seq');
						array_multisort($sort2,SORT_ASC,$data['PA'.$k]['part']);
					}
				}
				$sort1=array_column($data, 'seq');
				array_multisort($sort1,SORT_ASC,$data);
				// print_r($data);
			}
			LibFc::ArraySave($data, $file);
		}
		$indexPart=[];
		if(file_exists($file))
		{
			$indexPart=include($file);
		}
		// print_r($indexPart);
		if(count($indexPart))
		{
			$level2=[];//二级
			$level3=[];//三级
			foreach ($indexPart as $index=> $part) 
			{
				$level1[$index]=['name'=>$part['name'],'level'=>1,'seq'=>$part['seq']];
				if(isset($part['part']))
				{
					foreach ($part['part'] as $k => $v) 
					{
						$level2[$index][$k]=['name'=>$v['name'],'level'=>2,'seq'=>$v['seq']];
						if(count($v['PB']))
						{
							foreach ($v['PB'] as $g => $h) 
							{
								$level3[$index][$k][]=['id'=>$h['id'],'seq'=>$h['seq']];
							}						
						}
					}
				}
			}
			// print_r($level3);
			$res=$B2cPart->getAllPart(false);
			foreach ($level3 as $k => $v) 
			{
				foreach ($v as $i=> $arr) 
				{
					foreach ($arr as $g => $h) 
					{
							$part3[$k][$i][$g]['name']=$res['data'][$h['id']]['part_name'];
							$part3[$k][$i][$g]['level']=3;
							$part3[$k][$i][$g]['seq']=$h['seq'];
							$part3[$k][$i][$g]['partId']=$h['id'];
						if(isset($res['data'][$h['id']]['part_name']))
						{
						}
					}
				}
			}
		}
		// print_r($level1);
		// print_r($level2);
		// print_r($level3);
		// print_r($part3);
		LibTpl::Set('level1',$level1);
		LibTpl::Set('level2',$level2);
		LibTpl::Set('level3',$part3);
		// print_r($indexPart);
		LibTpl::Put();
	}
	/**
	 * @method    获取分类
	 * @author 卢
	 * @copyright 2017-11-10
	 */
	function getPartTree()
	{
		$Params = MVC::$URL_PARAMS;
		$B2cPart=new B2cPart();
		$resultData=$B2cPart->Get('bc_part_tree left join bc_part on pt_part_id=part_id',['pt_part_id','part_keyword','part_name','pt_parent_part_id','pt_path','part_is_end']);
		$path=$Params['path']??'0';
		$partData=$B2cPart->getPartChild($resultData['data'],$path);
		LibTpl::Set('checkArr',explode(',', $Params['partId']));
		LibTpl::Set('treeData',$partData['data']);
		$data=LibTpl::Fetch('part/getPartTree.php');
		LibFc::ajaxJsonEncode(array('status'=>true,'data'=>$data));
	}
	/**
	 * @method    修稿配件分类排序
	 * @author 卢
	 * @copyright 2018-01-18
	 */
	function changePartSeq()
	{
		LibRule::Check('SO03');
		$Params = MVC::$URL_PARAMS;
		if((int)$Params['partId']&&(int)$Params['seq'])
		{
			$B2cPart=new B2cPart();
			$res=$B2cPart->get('bc_part_tree',['pt_path'],sprintf(' and pt_part_id=%d',(int)$Params['partId']),true);
			$path=$res['data'];
			$pathSeq='';
			if(!empty($path['pt_path']))
			{
				$pathArr=explode(',',$path['pt_path']);
				foreach ($pathArr as $v) 
				{
					if(!empty($v))
					{
						$res=$B2cPart->get('bc_part_tree',['pt_seq'],sprintf(' and pt_part_id=%d',$v),true);
						$pathSeq.=!empty($res['data']['pt_seq'])?','.$res['data']['pt_seq']:',999';
					}
				}
			}
			$pathSeq.=','.(int)$Params['seq'];
			$pathSeq=trim($pathSeq,',');
			$res=$B2cPart->set('bc_part_tree',['pt_seq'=>(int)$Params['seq'],'pt_path_seq'=>$pathSeq],sprintf(' and pt_part_id=%d',(int)$Params['partId']));
		}
		LibFc::ajaxJsonEncode($res);
	}
	/**
	 * @method    修改配件分类的某字段值
	 * @author 卢
	 * @copyright 2018-01-18
	 */
	function ajaxSetPartFiled()
	{
		LibRule::Check('SO03');
		$Params = MVC::$URL_PARAMS;
		if(!empty($Params['partId']) && !empty($Params['filed']) && isset($Params['val']))
		{
			$B2cPart=new B2cPart();
			$B2cPart->set('bc_part',[$Params['filed']=>$Params['val']],sprintf(' and part_id=%d', $Params['partId']));
		}
		LibFc::ajaxJsonEncode(['status'=>true,'data'=>true]);
	}
	/**
	 * @method    检查参数值是否有配件在使用
	 * @author 卢
	 * @copyright 2018-02-28
	 */
	function checkParamVal()
	{
		$Params = MVC::$URL_PARAMS;
		if(LibFc::Int($Params['valId']))
		{
			$B2cPart=new B2cPart();
			//判断该去那个表取数据
			$res=$B2cPart->getFieldUniVal('bc_part_param_link left join bc_param_label on pal_id=ppl_pal_id left join 
				bc_param_value on pav_pal_id=pal_id','ppl_style',sprintf(' and pav_id=%d',$Params['valId']));
			if(count($res['data']))
			{
				$table=$res['data'][0]?'bc_product_param_float':'bc_product_param_string';
				$field=$res['data'][0]?'ppf_pav_id':'pps_pav_id';
				$count=$B2cPart->get($table,['count(*) count'],sprintf(' and %s =%d',$field,$Params['valId']),true);
				if($count['data']['count']>0)
				{
					LibFc::ajaxJsonEncode(['status'=>false,'data'=>'该参数值有'.$count['data']['count'].'个配件在使用，不允许删除！']);
					exit();
				}
				$res=$B2cPart->del('bc_param_value',sprintf(' and pav_id=%d',$Params['valId']));
				LibFc::ajaxJsonEncode($res);
			}
		}
		LibFc::ajaxJsonEncode(['status'=>false,'data'=>'参数错误']);
	}
	/**
	 * @method    零件分类列表展示
	 * @author 卢
	 * @copyright 2018-03-21
	 */
	function changePartList()
	{
		LibRule::Check('SO05');
		$B2cPart=new B2cPart();
		// and pt_parent_part_id != 4161
		$resultData=$B2cPart->get('bc_part_tree left join bc_part on pt_part_id=part_id',['pt_part_id','part_keyword','part_name','pt_parent_part_id','pt_path','part_is_end','pt_seq','part_is_host'],' and pt_ismain>0 order by pt_seq asc');
		LibTpl::Set('list',array_column($resultData['data'], null,'pt_part_id'));
		$id=array();
		foreach ($resultData['data'] as $k => $v) 
		{
			if($v['part_is_end']>0)
			{
				$id[]=$v['pt_part_id'];
			}
			$resultData['data'][$k]['end']=$v['part_is_end']>0 ? '是' : '否'; 
		}
		if(count($id))
		{
			$dTotal=$B2cPart->get('bc_product',['count(*) count ,pro_part_id'],sprintf(' and pro_part_id in (%s) group by pro_part_id',implode(',',$id)));		
			foreach ($dTotal['data'] as $k => $v) 
			{
				$partKey=$v['pro_part_id'];
				$partTotal=$v['count'];
				unset($dTotal['data'][$k]);
				$dTotal['data'][$partKey]=$partTotal;
			}
			//获取参数标签
			// $res=$B2cPart->get('bc_part_param_link left join bc_param_label on pal_id=ppl_pal_id left join bc_param_unit on pau_id=ppl_pau_id left join bc_param_value on pav_pal_id=ppl_pal_id',['ppl_part_id','ppl_pal_id','ppl_pau_id','ppl_style','pal_name','pau_name','pav_value'],sprintf(' and ppl_part_id in (%s) order by ppl_seq asc',implode(',',$id)));
			
			// $labelArr=array_unique(array_column($res['data'], 'pal_name'));
			// print_r($labelArr);

			$res=$B2cPart->get('bc_param_label left join bc_part_param_link on pal_id=ppl_pal_id',['pal_name','pal_id','ppl_part_id'],sprintf(' and ppl_part_id in (%s) order by ppl_seq asc',implode(',',$id)));
			// print_r($res);
			if(!empty($res['data']))
			{
				foreach ($res['data'] as $k => $v) 
				{
					$labelArr[$v['ppl_part_id']][]=$v['pal_name'];
				}
			}
			// print_r($labelArr);
			// die;
			LibTpl::Set('labelArr',$labelArr);
			$paramArr=[];
			foreach ($res['data'] as $v) 
			{
				$paramArr[$v['ppl_part_id']][$v['pal_name']]['pau_name'][]=$v['pau_name'];
				$paramArr[$v['ppl_part_id']][$v['pal_name']]['pav_value'][]=$v['pav_value'];
			}
			LibTpl::Set('paramArr',$paramArr);
			// print_r($paramArr);
		}

		foreach ($resultData['data'] as $k => $v) 
		{
			$resultData['data'][$k]['productCount']=isset($dTotal['data'][$v['pt_part_id']])? $dTotal['data'][$v['pt_part_id']] : 0;
		}
		$partData=$B2cPart->getPartTree($resultData['data']);
		// print_r($partData['data']);
		LibTpl::Set('treeData',$partData['data']);
		LibTpl::Set('title','零件管理-跑街的');
		LibTpl::Put();
	}
	function changePart()
	{
		LibRule::Check('SO05');
		$B2cPart=new B2cPart();
		$res=$B2cPart->changePart($_POST['checkPart'],$_POST['target']);
		LibFc::Go(mvc::$cfg['ADMIN_URI'].'part/editPart?partId='.$_POST['target']);
		// print_r($_POST);
	}
	/**
	 * @method    零件分类列表展示
	 * @author 卢
	 * @copyright 2018-03-21
	 */
	function partList()
	{
		LibRule::Check('SO01');
		$B2cPart=new B2cPart();
		$resultData=$B2cPart->get('bc_part_tree left join bc_part on pt_part_id=part_id',['pt_part_id','part_keyword','part_name','pt_parent_part_id','pt_path','part_is_end','pt_seq','part_is_host'],' and pt_parent_part_id != 4161 order by pt_seq asc');
		$id=array();
		foreach ($resultData['data'] as $k => $v) 
		{
			if($v['part_is_end']>0)
			{
				$id[]=$v['pt_part_id'];
			}
			$resultData['data'][$k]['end']=$v['part_is_end']>0 ? '是' : '否'; 
		}
		if(count($id))
		{
			$dTotal=$B2cPart->get('bc_product',['count(*) count ,pro_part_id'],sprintf(' and pro_part_id in (%s) group by pro_part_id',implode(',',$id)));		
			foreach ($dTotal['data'] as $k => $v) 
			{
				$partKey=$v['pro_part_id'];
				$partTotal=$v['count'];
				unset($dTotal['data'][$k]);
				$dTotal['data'][$partKey]=$partTotal;
			}
			//获取参数标签
			$res=$B2cPart->get('bc_part_param_link left join bc_param_label on pal_id=ppl_pal_id left join bc_param_unit on pau_id=ppl_pau_id left join bc_param_value on pav_pal_id=ppl_pal_id',['ppl_part_id','ppl_pal_id','ppl_pau_id','ppl_style','pal_name','pau_name','pav_value'],sprintf(' and ppl_part_id in (%s) order by ppl_seq asc',implode(',',$id)));
			
			$labelArr=array_unique(array_column($res['data'], 'pal_name'));
			LibTpl::Set('labelArr',$labelArr);
			$paramArr=[];
			foreach ($res['data'] as $v) 
			{
				$paramArr[$v['ppl_part_id']][$v['pal_name']]['pau_name'][]=$v['pau_name'];
				$paramArr[$v['ppl_part_id']][$v['pal_name']]['pav_value'][]=$v['pav_value'];
			}
			LibTpl::Set('paramArr',$paramArr);
			// print_r($paramArr);
		}

		foreach ($resultData['data'] as $k => $v) 
		{
			$resultData['data'][$k]['productCount']=isset($dTotal['data'][$v['pt_part_id']])? $dTotal['data'][$v['pt_part_id']] : 0;
		}
		$partData=$B2cPart->getPartTree($resultData['data']);
		// print_r($partData['data']);
		LibTpl::Set('treeData',$partData['data']);
		LibTpl::Set('title','零件管理-跑街的');
		LibTpl::Put();
	}


	//2019/7/12 将已有参数转到子类别
	function changeParamToSmallPart()
	{
		exit;
		$B2cBase = new B2cBase();
		$smallPartArr = [];
		$res = $B2cBase->get('bc_part_small', ['*']);
		foreach($res['data'] as $v)
		{
			$smallPartArr[$v['pas_part_id']][trim(strtoupper($v['pas_name']))] = $v['pas_id'];
		}
		$table = 'bc_product_param_string
		join bc_part_param_link on ppl_pal_id = pps_pal_id
		join bc_part on part_id = ppl_part_id';
		$res = $B2cBase->get($table, ['part_id, pps_value||part_name smallp, pps_pal_id, pps_value'], ' group by part_id, part_name, pps_pal_id, pps_value order by part_name');
		$labelArr = $res['data'];
		foreach($labelArr as $v)
		{
			$sname = trim(strtoupper($v['smallp']));
			//创建子类
			if(empty($smallPartArr[$v['part_id']][$sname]))
			{
				$add = [
					'pas_part_id'=>$v['part_id'],
					'pas_name'=>$v['smallp'],
				];
				$res = $B2cBase->add('bc_part_small', $add);
				$smallPartArr[$v['part_id']][$sname] = $res['data'];
			}	
			$where = sprintf(" and pro_id in (
			select pps_pro_id from bc_product_param_string
			join bc_part_param_link on ppl_pal_id = pps_pal_id
			where ppl_part_id = %d and pps_pal_id = %d  and pps_value = '%s'
			)", $v['part_id'], $v['pps_pal_id'], LibFc::Escape($v['pps_value']));
			$B2cBase->set('bc_product', ['pro_pas_id'=>$smallPartArr[$v['part_id']][$sname]], $where);
		}
		echo 'ok';
	}


	//TCD 的厂商列表
	function tcdsup()
	{
		$TcdcnItem = new TcdcnItem();
		$res= $TcdcnItem->get('data_brand',['*'], ' and bra_id in (select distinct pro_bra_id from data_product) order by bra_name asc');
		LibTpl::Set('supArr',$res['data']);

		$res= $TcdcnItem->get('data_group',['*'], ' order by prt_fc asc, prt_assemblygroupname asc');
		$partArr = array_column($res['data'], null, 'prt_id');
		foreach($partArr as $k=>$v)
		{
			$v['path'] = [];
			foreach(explode(',', $v['prt_path']) as $pv)
			{
				if(!empty($partArr[$pv]['prt_assemblygroupname']))
					$v['path'][] = $partArr[$pv]['prt_assemblygroupname'];
			}
			$v['pathnames'] = implode('>', $v['path']);
			$partArr[$k] = $v;
		}
		LibTpl::Set('partArr',$partArr);

		LibTpl::Set('title','厂商/零件-TCD中国');
		LibTpl::Put();
	}
}