<?php
/**
  * @method 跑街令 采购单 与 报价
  * @author soul
  * @copyright 2018/7/23
  */
class PjlPurchase extends PjlBase
{
	//将配件加入到采购购物车，返回最新的购物车数量
	public function addCart($dataArr)
	{
		$dataArr['puc_pu_id'] = (int) $dataArr['puc_pu_id'];
		$dataArr['puc_brand_id'] = (int) $dataArr['puc_brand_id'];
		$dataArr['puc_mod3_id'] = (int) $dataArr['puc_mod3_id'];
		$dataArr['puc_count'] = (int) $dataArr['puc_count'];
		$dataArr['puc_count'] = $dataArr['puc_count'] < 1? 1: $dataArr['puc_count'];

		$dataArr['puc_pro_id'] = (int) $dataArr['puc_pro_id'];
		$dataArr['puc_etk_id'] = (int) $dataArr['puc_etk_id'];
		$dataArr['puc_grp2_id'] = (int) $dataArr['puc_grp2_id'];

		$PjlUser = new PjlUser();
		$PjlUser->initUser($dataArr['puc_pu_id']);
		
		if($dataArr['puc_brand_id'] < 1 && $dataArr['puc_mod3_id'] < 1)
			return LibFc::ReturnData(false, '请选择汽车品牌或者具体车型！');
		$dataArr['puc_name'] = strip_tags(trim($dataArr['puc_name']));
		if(strlen($dataArr['puc_name']) < 1)
			return LibFc::ReturnData(false, '请填写配件名称！');

		if(isset($dataArr['puc_pro_type']) && !in_array($dataArr['puc_pro_type'], ['etk','pjd','yp','tcd','aaia']))
			return LibFc::ReturnData(false, 'type 参数不正确!');

		$dataArr['puc_number'] = isset($dataArr['puc_number'])? trim($dataArr['puc_number']): '';
		$dataArr['puc_number_format'] = LibFc::FormatNum($dataArr['puc_number']);
		if($dataArr['puc_mod3_id'] > 0)
		{
			$where = sprintf(" and puc_pu_id=%d and puc_mod3_id=%d and puc_name='%s' and puc_number_format='%s'",
				$dataArr['puc_pu_id'], $dataArr['puc_mod3_id'], LibFc::Escape($dataArr['puc_name']), LibFc::Escape($dataArr['puc_number_format']));
		}
		else
		{
			$where = sprintf(" and puc_pu_id=%d and puc_brand_id=%d and puc_name='%s' and puc_number_format='%s'",
				$dataArr['puc_pu_id'], $dataArr['puc_brand_id'], LibFc::Escape($dataArr['puc_name']), LibFc::Escape($dataArr['puc_number_format']));
		}
		$res = $this->get('pl_purchase_cart', ['puc_id', 'puc_count'], $where, true);
		if(!empty($res['data']))
		{
			$this->set('pl_purchase_cart', ['puc_count'=>$res['data']['puc_count']+$dataArr['puc_count'] ], sprintf(" and puc_id=%d", $res['data']['puc_id']));
		}
		else
		{
			if($dataArr['puc_mod3_id'] > 0)
			{
				$LibYpApi = new LibYpApi();
				$postArr = [
					'level'=>3,
					'filed'=>['brand_id'],
					'where'=>sprintf(" and mod3_id=%d", $dataArr['puc_mod3_id']),
					'oneRow'=>true
				];
				$res = $LibYpApi->Get('ypc2/getModel', [], $postArr);
				if(empty($res['data']))
					return LibFc::ReturnData(false, '车型不存在，请重新选择！');
				$dataArr['puc_brand_id'] = $res['data']['brand_id'];
			}
			$dataArr['puc_atime'] = time();
			$this->add('pl_purchase_cart', $dataArr);
		}
		$res = $this->get('pl_purchase_cart', ['sum(puc_count) as puc_count'], sprintf(" and puc_pu_id=%d", $dataArr['puc_pu_id']), true);
		return LibFc::ReturnData(true, $res['data']['puc_count']);
	}



	/**
	  * @method 添加采购单
	  * @param  $dataArr 基本信息['pur_pu_id'=>发布人, 'pur_vin'=>, 'pur_brand_id'=>, 'pur_mod3_id'=>.....]
	  * @param  $proArr 配件信息[['pup_name'=>, 'pup_number'=>'', 'pup_count'=>]]
	  * @author soul
	  * @copyright 2018/7/23
	  * @return ["status"=> bool(true), "data"=> $purId, "code"=>""]
	  */
	public function addPurchase($dataArr, $proArr)
	{
		$must = ['pur_pu_id', 'pur_brand_id'];
		foreach($must as $filed)
		{
			if(!isset($dataArr[$filed]) || empty($dataArr[$filed]) || $dataArr[$filed] < 1)
				return LibFc::ReturnData(false, '采购单的'.$filed.'参数不能空！');
			$dataArr[$filed] = (int) $dataArr[$filed];
		}

		if(empty($dataArr['pur_model']))
			return LibFc::ReturnData(false, '请选择车型或者品牌！');
		
		$PjlUser = new PjlUser();
		$PjlUser->initUser($dataArr['pur_pu_id']);

		if(isset($dataArr['pur_vin']))
		{
			$dataArr['pur_vin'] = LibFc::FormatVin($dataArr['pur_vin']);
			if(strlen($dataArr['pur_vin']) > 0 && strlen($dataArr['pur_vin']) != 17)
				return LibFc::ReturnData(false, '采购单的17位车架号不正确！');
		}
		
		$dataArr['pur_pro_count'] = 0;
		foreach($proArr as $pro)
		{
			if(empty($pro['pup_name']))
				return LibFc::ReturnData(false, '采购单的配件名称不能为空！');

			if(empty($pro['pup_count']) || $pro['pup_count'] < 1)
				return LibFc::ReturnData(false, $pro['pup_count'].'的采购数量不正确！');

			$dataArr['pur_pro_count'] += $pro['pup_count'];
		}



		if (!empty($dataArr['pur_pct_ids']))
		{
			$dataArr['pur_pct_ids'] = implode(',',array_unique(array_filter(explode(',', $dataArr['pur_pct_ids']),'LibFc::Int')));
		}

		$dataArr['pur_mod3_id'] = (int) $dataArr['pur_mod3_id'];
		$dataArr['pur_status'] = 0;
		$dataArr['pur_atime'] = !empty($dataArr['pur_atime'])?$dataArr['pur_atime']:time();
		$dataArr['pur_iscall'] = empty($dataArr['pur_iscall']) ? 0: 1;
		if(!empty($dataArr['pur_iscall']) && empty($dataArr['pur_tel']))
		{
			//获取账号绑定的手机号码
			$LibYpApi = new LibYpApi();
			$ures = $LibYpApi->get('user/getUserById', ['uid'=>$dataArr['pur_pu_id']]);
			$dataArr['pur_tel'] = $ures['data']['u_mobile'];
		}
		$dataArr['pur_close_time'] = 0;
		$dataArr['pur_ok_time'] = 0;
		$checkArr=[];
		$this->PjlDb->Begin();

		$res = $this->add('pl_purchase', $dataArr);
		$purId = $res['data'];
		foreach($proArr as $pro)
		{
			$res = $this->get('pl_part', ['part_id'], sprintf(" and CONCAT(',', part_keyword, ',') like '%%,%s,%%' order by part_parent limit 1", LibFc::Escape($pro['pup_name'])), true);
			if(!empty($res['data']))
				$pro['pup_part_id'] = (int) $res['data']['part_id'];

			$pro['pup_pur_id'] = $purId;
			if(isset($pro['pup_number']) && strlen(trim($pro['pup_number'])) > 0)
				$pro['pup_number_format'] = LibFc::FormatNum($pro['pup_number']);
			$res=$this->add('pl_purchase_product', $pro);
			if(!empty(LibFc::FormatNum($pro['pup_number']))&&!empty($pro['pup_name']))
			{
				$checkArr[$res['data']]=[
					'number'=>LibFc::FormatNum($pro['pup_number']),
					'name'=>$pro['pup_name']
				];
			}
			//从预购清单中删除
			$where = sprintf(" and puc_pu_id=%d and puc_mod3_id=%d and puc_brand_id=%d and puc_name='%s' and puc_number_format='%s'", 
				$dataArr['pur_pu_id'], $dataArr['pur_mod3_id'], $dataArr['pur_brand_id'], LibFc::Escape($pro['pup_name']), LibFc::Escape($pro['pup_number_format']));
			$this->del('pl_purchase_cart', $where);
		}
		//更新信用分
		// $PjlUser->changeUserCredit($dataArr['pur_pu_id'], -0.5, '发布询价');

		$gArr = [
			'ug_style'=>'addPurchase',
			'ug_des'=>'发布询价',
			'ug_val_id'=>$purId
		];
		$PjlUser->changeGrowth($dataArr['pur_pu_id'], $gArr);

		//更新用户求购次数
		$this->set('pl_user',['pu_purchase_count'=>'#@pu_purchase_count + 1'], sprintf('and pu_uid=%s', $dataArr['pur_pu_id']));
		//自动报价
		$this->autoOffer($dataArr['pur_pu_id'],$purId,$checkArr);
		$this->PjlDb->End();
		return LibFc::ReturnData(true, $purId);
	}


	/**
	  * @method 关闭采购单||完成采购单
	  * @param  $uid 采购单所属人
	  * @param  $purId 采购单
	  * @param  $status 关闭-1  完成1
	  * @author soul
	  * @copyright 2018/7/23
	  * @return ["status"=> bool(true), "data"=>, "code"=>""]
	  */
	public function setPurchaseStatus($uid, $purId, $status)
	{
		$uid = (int) $uid;
		$purId = (int) $purId;
		$status = (int) $status;
		if($uid > 0 && $purId > 0 && in_array($status, [-1, 1]))
		{
			$res = $this->get('pl_purchase', ['pur_status', 'pur_atime', 'pur_pu_id'], sprintf(" and pur_pu_id=%d and pur_id=%d", $uid, $purId), true);
			if(empty($res['data']))
				return LibFc::ReturnData(false, '采购单不存在！');
			$purArr = $res['data'];
			if($purArr['pur_status'] == $status)
				return LibFc::ReturnData(true);
			if($purArr['pur_status'] != 0)
				return LibFc::ReturnData(false, '非询价中的采购单不允许修改状态！');
			if($status == 1)
				$setArr = ['pur_status'=>$status, 'pur_ok_time'=>time()];
			else
				$setArr = ['pur_status'=>$status, 'pur_close_time'=>time()];

			// 关闭则回滚信用分
			// $score = $status==1 ? 1 : 0.5;
			$this->PjlDb->Begin();
			$this->set('pl_purchase', $setArr, sprintf(" and pur_pu_id=%d and pur_id=%d", $uid, $purId));
			
			$PjlUser = new PjlUser();
			if($status == -1 && (time() - $purArr['pur_atime']) < 86400)
			{
				$gArr = [
					'ug_style'=>'addPurchase',
					'ug_des'=>'24小时内取消询价单',
					'ug_val_id'=>$purId
				];
				$PjlUser->changeGrowth($purArr['pur_pu_id'], $gArr, true);
			}
			// $PjlUser->changeUserCredit($uid, $score, '取消询价');
			$this->PjlDb->End();
			return LibFc::ReturnData(true);
		}
		return LibFc::ReturnData(false, 'setPurchaseStatus提供的参数有误！');
	}


	/**
	  * @method 编辑采购单配件信息
	  * @param  $pur_id 询价单ID
	  * @param  $proArr 配件信息[['pup_name'=>, 'pup_number'=>'', 'pup_count'=>]]
	  * @author soul
	  * @copyright 2018/7/23
	  * @return ["status"=> bool(true), "data"=> $purId, "code"=>""]
	  */
	public function setPurchaseProduct($pur_id, $proArr)
	{
		$res = $this->get('pl_purchase', ['pur_id', 'pur_status'], sprintf(" and pur_id=%d", $pur_id), true);
		if(empty($res['data'])) return LibFc::ReturnData(false, '询价单不存在！');
		$purArr = $res['data'];
		
		if($purArr['pur_status'] != 0)
			return LibFc::ReturnData(false, '已关闭或者已完成的询价单不允许编辑！');

		$res = $this->get('pl_purchase_product', ['*'], sprintf(" and pup_pur_id=%d", $purArr['pur_id']));
		$hasArr = [];
		foreach($res['data'] as $v)
		{
			$hasArr[$v['pup_name'].'@'.$v['pup_number_format']] = $v['pup_id'];
		}

		$setArr['pur_pro_count'] = 0;
		if(empty($hasArr)) $setArr['pur_atime'] = time();
		
		$this->PjlDb->Begin();
		$newArr = [];
		foreach($proArr as $k=>$pro)
		{
			if(empty($pro['pup_name']))
				return LibFc::ReturnData(false, '采购单的配件名称不能为空！');
			$pro['pup_count'] = empty($pro['pup_count']) || $pro['pup_count'] < 1 ? 1: (int) $pro['pup_count'];
			$setArr['pur_pro_count'] += $pro['pup_count'];
			$pro['pup_number_format'] = LibFc::FormatNum($pro['pup_number']);
			
			$res = $this->get('pl_part', ['part_id'], sprintf(" and CONCAT(',', part_keyword, ',') like '%%,%s,%%' order by part_parent limit 1", LibFc::Escape($pro['pup_name'])), true);
			if(!empty($res['data']))
				$pro['pup_part_id'] = (int) $res['data']['part_id'];
			$pup_id = !empty($hasArr[$pro['pup_name'].'@'.$pro['pup_number_format']])? $hasArr[$pro['pup_name'].'@'.$pro['pup_number_format']]: 0;
			if($pup_id > 0)
			{
				$this->set('pl_purchase_product', $pro, sprintf(" and pup_id=%d", $pup_id));
			}
			else
			{
				$pro['pup_pur_id'] = $purArr['pur_id'];
				$res = $this->add('pl_purchase_product', $pro);
				$pup_id = $res['data'];
			}
			$newArr[] = $pup_id;
		}
		$this->del('pl_purchase_product', sprintf(" and pup_pur_id=%d and pup_id not in(%s)", $purArr['pur_id'], implode(',', $newArr) ));
		$this->set('pl_purchase', $setArr, sprintf(" and pur_id=%d", $purArr['pur_id']));
		$this->PjlDb->End();
		return LibFc::ReturnData(true, $purId);
	}


	/**
	  * @method 采购单报价
	  * @param  $dataArr 基本信息['po_pur_id'=>采购单ID, 'po_opu_uid'=>报价人ID, 'po_shop_id'=>.....]
	  * @param  $proArr 配件信息[pop_pup_id=>['原厂'=>'', '台湾件'=>.....]]
	  * @author soul
	  * @copyright 2018/7/23
	  * @return ["status"=> bool(true), "data"=> $purId, "code"=>""]
	  */
	public function addPurchaseOffer($dataArr, $proArr,$otherArr=[])
	{
		$dataArr['po_pur_id'] = (int) $dataArr['po_pur_id'];
		$dataArr['po_opu_uid'] = (int) $dataArr['po_opu_uid'];
		$dataArr['po_shop_id'] = (int) $dataArr['po_shop_id'];
		if($dataArr['po_pur_id'] > 0 && $dataArr['po_opu_uid'] > 0 && $dataArr['po_shop_id'] > 0 && !empty($proArr))
		{
			$res = $this->get('pl_shop', ['shop_pu_id'], sprintf(" and shop_status = 2 and shop_id=%d", $dataArr['po_shop_id']), true);
			if(empty($res['data']))
				return LibFc::ReturnData(false, '此配件商ID尚未开通报价功能！');
			if($res['data']['shop_pu_id'] != $dataArr['po_opu_uid'])
			{
				$res = $this->get('pl_shop_user', ['shu_pu_uid'], sprintf(" and shu_status = 1 and shu_shop_id =%d and shu_pu_uid=%d", $dataArr['po_shop_id'], $dataArr['po_opu_uid']), true);
				if(empty($res['data']))
					return LibFc::ReturnData(false, '此子账号不存在或者尚未开通报价功能！');
			}
			
			$res = $this->get('pl_purchase_product join pl_purchase on pur_id = pup_pur_id', ['pup_id'], sprintf(" and pur_status = 0 and pup_pur_id=%d", $dataArr['po_pur_id']));
			if(empty($res['data']))
				return LibFc::ReturnData(false, '采购单不存在或者已停止询价！');
			$purProArr = array_column($res['data'], 'pup_id');
			
			$res = $this->get('pl_purchase_quality', ['puq_id', 'puq_name']);
			$qualityArr = array_column($res['data'], null, 'puq_name');

			$offPro = [];
			foreach($proArr as $proId=>$priceArr)
			{
				if(!in_array($proId, $purProArr))
					return LibFc::ReturnData(false, '报价的配件不存在！');
				$tPrice = [];
				// print_r($qualityArr);
				foreach($priceArr as $qua=>$price)
				{
					$qua = trim($qua);
					$price = sprintf("%.2f", $price);
					if($price <= 0)
						return LibFc::ReturnData(false, '配件报价不能低于0.01元！');
					$tPrice[] = [
						'puq_id'=>(int) $qualityArr[$qua]['puq_id'],
						'quality'=>$qua,
						'price'=>$price
					];
					// print_r($tPrice);
				}
				if(empty($tPrice))
					return LibFc::ReturnData(false, '配件报价不能为空！');
				
				$offPro[] = [
					'pop_pup_id'=>$proId,
					'pop_price'=>json_encode($tPrice,JSON_UNESCAPED_UNICODE),
					'pop_remark'=>(!empty($otherArr[$proId])?$otherArr[$proId]:'')
				];
			}
			$this->PjlDb->Begin();

			//关闭此询价单之前的报价单
			$this->closePurchaseOffer($dataArr['po_pur_id'], $dataArr['po_opu_uid'], 0, 0);
		
			$offArr = [
				'po_pur_id'=>$dataArr['po_pur_id'],	
				'po_opu_uid'=>$dataArr['po_opu_uid'],	
				'po_shop_id'=>$dataArr['po_shop_id'],	
				'po_atime'=>time()	
			];
			$res = $this->add('pl_purchase_offer', $offArr);
			$poId = $res['data'];
			foreach($offPro as $pro)
			{
				$pro['pop_po_id'] = $poId;
				$this->add('pl_purchase_offer_price', $pro);
			}

			$PjlUser = new PjlUser();
			$gArr = [
				'ug_style'=>'addOffer',
				'ug_des'=>'发布报价',
				'ug_val_id'=>$dataArr['po_pur_id']
			];
			$PjlUser->changeGrowth($offArr['po_opu_uid'], $gArr);

			//报价次数加1
			$PjlShop=new PjlShop();
			$PjlShop->updateOfferCount(1,$dataArr['po_shop_id']);
			$this->PjlDb->End();
			return LibFc::ReturnData(true, $poId);
		}
		return LibFc::ReturnData(false, 'addPurchaseOffer提供的参数有误！');
	}


	/**
	  * @method 关闭报价单
	  * @param  $po_pur_id [必选] 询价单ID
	  * @param  $po_opu_uid [必选] 报价者
	  * @param  $po_id [可选] 报价单ID
	  * @param  $po_close_uid [可选] 关闭者
	  * @author soul
	  * @copyright 2018/7/23
	  * @return ["status"=> bool(true), "data"=>, "code"=>""]
	  */
	public function closePurchaseOffer($po_pur_id, $po_opu_uid, $po_id = 0, $po_close_uid = 0)
	{
		$po_pur_id = (int) $po_pur_id;
		$po_opu_uid = (int) $po_opu_uid;
		$po_id = (int) $po_id;
		if($po_pur_id > 0 && $po_opu_uid > 0)
		{
			$where = sprintf(' and po_pur_id=%d and po_opu_uid=%d', $po_pur_id, $po_opu_uid);
			if($po_id != 0) $where .= sprintf(" and po_id=%d", $po_id);

			$res = $this->get('pl_purchase_offer', ['po_atime'], $where, true);
			if(!empty($res['data']))
			{
				$PjlUser = new PjlUser();
				if((time() - $res['data']['po_atime']) < 86400)
				{
					$gArr = [
						'ug_style'=>'addOffer',
						'ug_des'=>'24小时内取消报价单',
						'ug_val_id'=>$po_pur_id
					];
					$PjlUser->changeGrowth($po_opu_uid, $gArr, true);
				}
				$this->set('pl_purchase_offer',['po_status'=>-1, 'po_close_time'=>time(), 'po_close_uid'=>(int) $po_close_uid], $where);
			}
			return LibFc::ReturnData(true);
		}
		return LibFc::ReturnData(false, 'closePurchaseOffer提供的参数有误！');
	}
	/**
	 * @method    获取采购单主信息列表
	 * @param     integer         $page  [页码]
	 * @param     integer         $limit [条数]
	 * @param     string          $where []
	 * @param     string          $order [排序]
	 * @return    [type]                 [description]
	 * @author 卢
	 * @copyright 2018-08-08
	 */
	function getPurchaseList($page=1,$limit=10,$where=' and pur_status=0',$order=' order by pur_atime desc')
	{
		$where.=$order;

		$where.=sprintf(' limit %d,%d',($page-1)*$limit,$limit);
		// echo $where;
		$res=$this->get('pl_purchase',['*'],$where);
		// if(!empty($res['data']))
		// {
		// 	foreach ($res['data'] as $key => $value) 
		// 	{
		// 		if(!empty($value['pur_imgs']))
		// 		{
		// 			$img = array_filter(explode(',',trim($value['pur_imgs'],',')));
		// 			$res['data'][$key]['pur_imgs'] = array_map(function($value){return mvc::$cfg['FILE_CENTER']['pjl']['url_get'].'&c=purchase&f='.$value.mvc::$cfg['FILE_CENTER']['pjl']['get_uri'];}, $img);
		// 		}
		// 	}
		// }
		// print_r($res);
		return $res;
	}
	/**
	 * @method    获取采购单配件
	 * @param     [int|arr]         $purArr [采购单ID]
	 * @return    [type]                 [description]
	 * @author 卢
	 * @copyright 2018-08-08
	 */
	function getPurchasePro($purArr)
	{
		if(!empty($purArr))
		{
			$purArr=is_array($purArr)?array_filter($purArr,'LibFc::Int'):[(int)$purArr];
			$data=[];
			if(!empty($purArr))
			{
				$res=$this->get('pl_purchase_product',['*'],sprintf(' and pup_pur_id in(%s)',implode(',',$purArr)));
				if(!empty($res['data']))
				{
					foreach ($res['data'] as $v) 
					{
						$data[$v['pup_pur_id']][]=$v;
					}
				}
			}
			return LibFc::ReturnData(true, $data);
		}
		return LibFc::ReturnData(false, 'getPurchaseCar提供的参数有误！');
	}
	/**
	 * @method    获取采购单信息
	 * @param     [int]     $purId [采购单号]
	 * @return    [type]            [description]
	 * @author 卢
	 * @copyright 2018-08-09
	 */
	function getOffer($purId)
	{
		if(LibFc::Int($purId))
		{
			$res=$this->get('pl_purchase',['*'],sprintf(' and pur_id=%d',$purId),true);
			$purInfo=$res['data'];
			if(!empty($purInfo))
			{
				$res=$this->getPurchasePro($purId);
				$purInfo['proArr']=$res['data'][$purId];
				if(!empty($purInfo['pur_imgs']))
				{
					$purInfo['imgArr']=[];
					$imgs=explode(',',trim($purInfo['pur_imgs'],','));
					foreach ($imgs as $img) 
					{
						$purInfo['imgArr'][]=mvc::$cfg['FILE_CENTER']['pjl']['url_get'].'&c=purchase&f='.$img.mvc::$cfg['FILE_CENTER']['b2c']['get_uri'];
					}
				}
				//用户信息
				////获取用户信息
				$PjlUser=new PjlUser();
				$res=$PjlUser->getUserInfo(['pu_style'],$purInfo['pur_pu_id']);
				$uInfo=$res['data'];
				if(!empty($purInfo['proArr']))
				{
					$purInfo['title']=implode(',',array_column($purInfo['proArr'], 'pup_name'));
				}
				$purInfo['userArr']=!empty($uInfo[$purInfo['pur_pu_id']])?$uInfo[$purInfo['pur_pu_id']]:[];
				$res=$PjlUser->getAddrByIds($purInfo['pur_pct_ids']);
				if(!empty($res))
				{
					$purInfo['city']=implode(' ', $res['data']);
				}
				return LibFc::ReturnData(true, $purInfo);
			}
			return LibFc::ReturnData(false, '询价单不存在！');
		}
		return LibFc::ReturnData(false, 'getOffer提供的参数有误！');
	}
	/**
	 * @method    获取采购单报价的店铺
	 * @param     [int]       $purId [采购单号]
	 * @return    [type]              [description]
	 * @author 卢
	 * @copyright 2018-08-09
	 */
	function getOfferShop($purId)
	{
		if(LibFc::Int($purId))
		{
			$dataArr=[];
			$res=$this->get('pl_purchase_offer',['*'],sprintf(' and po_status=1 and po_pur_id=%d',$purId));
			$data=$res['data'];
			if(!empty($data))
			{
				$PjlUser=new PjlUser();
				$shopIdArr=array_column($data, 'po_shop_id');
				$res=$this->get('pl_shop',['shop_id','shop_style','shop_name','shop_pct_ids','shop_addr','shop_quoted_count','shop_complete_count'],sprintf(' and shop_id in(%s)',implode(',',$shopIdArr)));
				$shopArr=array_column($res['data'],null, 'shop_id');
				foreach ($data as $k => $v) 
				{
					$data[$k]['shopInfo']=!empty($shopArr[$v['po_shop_id']])?$shopArr[$v['po_shop_id']]:[];
					if(!empty($shopArr[$v['po_shop_id']]['shop_pct_ids']))
					{
						$res=$PjlUser->getAddrByIds($shopArr[$v['po_shop_id']]['shop_pct_ids']);
						$data[$k]['shopInfo']['city']=implode(' ',$res['data']);
					}
				}
			}
			return LibFc::ReturnData(true, $data);
		}
		return LibFc::ReturnData(false, 'getOfferShop提供的参数有误！');
	}
	/**
	 * @method    获取品质
	 * @author 卢
	 * @copyright 2018-08-09
	 */
	function getQuality()
	{
		$res=$this->get('pl_purchase_quality',['puq_id','puq_name'],' order by puq_seq asc');
		array_push($res['data'], ['puq_id'=>0,'puq_name'=>'其他']);
		return $res;
	}
	/**
	 * @method    getUserPurchaseOfferList
	 * @param     [int]                   $uid     [用户id]
	 * @param     [int]                   $purid   [询价单id]
	 * @param     [int]                   $opid    [报价单id] 不存在则取分页全部 存在则取一条
	 * @param     [int]                   $nowpage [当前页]
	 * @param     [int]                   $perpage [每页数量]
	 * @param     [string]                $orderBy [排序规则]
	 * @author    liao
	 * @copyright 2018-08-09
	 * @return
	 */
	public function getUserPurchaseOfferList($uid,$purid,$opid='',$nowpage=1,$perpage=5,$orderBy='')
	{
		if (LibFc::Int($uid) && LibFc::Int($purid))
		{
			$res = $this->get('pl_purchase',['count(*) count'],sprintf('and pur_pu_id = %s and pur_id = %s',$uid,$purid),true);
			if ($res['data']['count'])
			{
				$dataArr = [];
				// 基本条件
				$where = sprintf('and po_pur_id = %s and po_status > 0',$purid);
				if (LibFc::Int($opid))
					$where = sprintf('%s and po_id = %s',$where,$opid);
				
				$res = $this->get('pl_purchase_offer',['count(*) count'],$where,true);
				$total = $res['data']['count'];
				if ($total > 0)
				{
					$table = 'pl_purchase_offer left join pl_purchase_offer_price on po_id=pop_po_id left join pl_purchase_product on pop_pup_id = pup_id';
					if (!LibFc::Int($opid))
					{
						$nowpage = LibFc::Int($nowpage) ? $nowpage : 1;
						$perpage = LibFc::Int($perpage) ? $perpage : 5;
						$where = sprintf('%s %s limit %s,%s',$where,$orderBy,($nowpage-1)*$perpage,$perpage);
						$filter = ['*'];
					} else
					{
						$filter = ['pup_id','po_shop_id','pup_name','pup_count','pup_number','pup_number_format','pop_price','po_id','po_read','pop_remark'];
					}
					//报价者列表
					$res = $this->get($table,$filter,$where);
					if (!empty($res['data']))
					{
						if (!LibFc::Int($opid))
						{
							//获取所有报价者的信息
							$shopIdArr = array_unique(array_column($res['data'],'po_shop_id'));
							$shopData = $this->get('pl_shop',['shop_id','shop_logo','shop_name','shop_score','shop_quoted_count','shop_pct_ids','shop_tel_on'],sprintf('and shop_id in (%s)',implode(',', $shopIdArr)));

							// 获取店铺的省市区字段
							$pcIdArr = array_column($shopData['data'], 'shop_pct_ids', 'shop_id');
							$PjlUser = new PjlUser();
							$pcIdArr = $PjlUser->getAddrByIdsArr($pcIdArr);
							$pcIdArr = $pcIdArr['data'];

							$hasPhoneOn = [];
							foreach ($shopData['data'] as $key => $value) 
							{
								$shopData['data'][$key]['shop_logo'] = mvc::$cfg['FILE_CENTER']['pjl']['url_get'].'&c=shop&f='.$value['shop_logo']. mvc::$cfg['FILE_CENTER']['pjl']['get_uri'];

								if ($value['shop_tel_on'] == 1)
								{
									$hasPhoneOn[] = $value['shop_id'];
								}

								$shopData['data'][$key]['shop_addr'] = !empty($pcIdArr[$value['shop_id']]) ? $pcIdArr[$value['shop_id']] : [];
							}

							$phoneArr = [];
							if (!empty($hasPhoneOn))
							{
								$LibYpApi = new LibYpApi();
								$post = [
									'filed'=>['u_id','u_mobile'],
									'where'=>sprintf(" and u_id in (%s)", implode(',', $hasPhoneOn)),
									'oneRow'=>false
								];
								$shop = $LibYpApi->Get('user/getUser',[], $post);
								$phoneArr = array_column($shop['data'], 'u_mobile', 'u_id');
							}

							$shopData = array_column($shopData['data'], null,'shop_id');
							
							//整合数据
							$arr = [];
							$noread = [];
							foreach ($res['data'] as $key => $value) 
							{
								$priceArr = json_decode($value['pop_price'],true);
								$priceArr = array_column($priceArr, 'price');
								$arr[$value['po_shop_id']]['price'][] = $priceArr[0]*$value['pup_count'];
								$arr[$value['po_shop_id']]['po_atime'] = LibFc::formatTime($value['po_atime']);
								$arr[$value['po_shop_id']]['po_id'] = $value['po_id'];
								$arr[$value['po_shop_id']]['po_read'] = $value['po_read'];
								$arr[$value['po_shop_id']]['shop_phone'] = !empty($phoneArr[$value['po_shop_id']]) ? $phoneArr[$value['po_shop_id']] : '';
								$opidArr[] = $value['po_id'];
							}
							foreach ($arr as $key => $value) 
							{
								$arr[$key]['pro_count'] = count($value['price']);
								$arr[$key]['price'] = array_sum($value['price']);
								if(!empty($shopData[$key]))
									$arr[$key] = array_merge($arr[$key],$shopData[$key]);
							}
							$dataArr = $arr;
						}else
						{
							foreach ($res['data'] as $key => $value) 
							{
								$arr = json_decode($value['pop_price'],true);
								$new = [];
								foreach ($arr as $av) 
								{
									$new['p'.$av['puq_id']] = $av;
								}
								$res['data'][$key]['pop_price'] = $new;
							}
							if ($value['po_read'] == 0)
							{
								$noread[] = $value['po_id'];
							}
							$dataArr = $res['data'];
							$opidArr[] = $opid;
							//设置已读
							if (!empty($noread))
							{
								$this->set('pl_purchase_offer',['po_read'=>1],sprintf('and po_id in (%s)',implode(',', $noread)));
							}
						}

						//查看是否已经订单是否已经下
						if (!empty($opidArr))
						{
							$res = $this->get('pl_order',['ord_po_id','ord_id'],sprintf("and ord_po_id in (%s) and ord_status!='cancel'",implode(',',$opidArr)));
							$order = array_column($res['data'], 'ord_id','ord_po_id');
							if (!empty($order))
							{
								foreach ($dataArr as $key => $value) 
								{
									if (!empty($order[$value['po_id']]))
									{
										$dataArr[$key]['hasorder'] = $order[$value['po_id']];
									}
								}
							}
						}
					}
				}
				return LibFc::ReturnData(true, $dataArr);
			}
		}
		return LibFc::ReturnData(false, 'getUserPurchaseOfferList 参数不正确');
	}
	/**
	 * @method    getUserPurchase
	 * @param     [int]                   $uid     [用户id]
	 * @param     [int]                   $purid   [询价单id]
	 * @author    liao
	 * @copyright 2018-08-09
	 * @return    ['status'=>xxx,data=>[]]
	 */
	public function getUserPurchase($uid,$purid)
	{
		if (LibFc::Int($uid) && LibFc::Int($purid))
		{
			//$res = $this->get('pl_purchase left join pl_purchase_product on pur_id = pup_pur_id',['pur_id','pur_status','pur_vin','pup_name','pur_brand_id','pur_model','pur_imgs','pur_atime'],sprintf('and pur_pu_id = %s and pur_id = %s',$uid,$purid));
			//取消用户限制  soul 2018/11/8
			$res = $this->get('pl_purchase left join pl_purchase_product on pur_id = pup_pur_id',['pur_id','pur_status','pur_vin','pup_name','pur_brand_id','pur_model','pur_imgs','pur_atime','pup_number'],sprintf(' and pur_id = %s',$purid));
			if (!empty($res['data']))
			{
				$dataArr = [];
				foreach ($res['data'] as $key => $value) 
				{
					if((time()-$value['pur_atime']) > (mvc::$cfg['purchaseExpireDay']*24*60*60) && $value['pur_status']>-1)
					{
						$value['pur_status'] = -2;
					}
					$img = current(array_filter(explode(',',$value['pur_imgs'])));
					$dataArr['pur_id'] = $value['pur_id'];
					$dataArr['pur_status'] = $value['pur_status'];
					$dataArr['pur_vin'] = $value['pur_vin'];
					$dataArr['name'][] = $value['pup_name'];
					$dataArr['brand_id'] = $value['pur_brand_id'];
					$dataArr['pur_model'] = $value['pur_model'];
					$dataArr['pur_imgs'] = !empty($img) ? mvc::$cfg['FILE_CENTER']['pjl']['url_get'].'&c=purchase&f='.$img.mvc::$cfg['FILE_CENTER']['pjl']['get_uri'] : '';
					$dataArr['pup_number'][] = $value['pup_number'];
				}
				$dataArr['name'] = implode('、', $dataArr['name']);
			}
			return LibFc::ReturnData(true, $dataArr);
		}
		return LibFc::ReturnData(false, 'getUserPurchase 参数不正确');
	}
	/**
	 * @method    获取报价单报价商品价格详情
	 * @param     [int]           $poId [报价单id]
	 * @return    [type]                 []
	 * @author 卢
	 * @copyright 2018-08-13
	 */
	function getOfferPrice($poId)
	{
		if(LibFc::Int($poId))
		{
			$where=sprintf(' and po_id=%d',$poId);
			$res=$this->get('pl_purchase_offer',['*'],$where,true);
			$mainArr=$res['data'];
			if(!empty($mainArr))
			{
				$res=$this->get('pl_purchase_offer_price left join pl_purchase_product on pup_id=pop_pup_id',['*'],sprintf(' and pop_po_id=%d',$poId));
				$proArr=$res['data'];
				if(!empty($proArr))
				{
					foreach ($proArr as $k => $v) 
					{
						$proArr[$k]['params']=json_decode($v['pop_price'],true);
						$proArr[$k]['pop_remark']=$v['pop_remark'];
					}
				}
				$mainArr['proArr']=$proArr;
			}
			return LibFc::ReturnData(true, $mainArr);
		}
		return LibFc::ReturnData(false, 'getOfferPrice提供的参数有误！');
	}
	/**
	 * @method    获取已报价的采购单和报价单信息
	 * @param     [type]           $purArr [description]
	 * @return    [type]                   [description]
	 * @author 卢
	 * @copyright 2018-08-13
	 */
	function getOfferPurchase($purArr,$field,$where='')
	{
		if(!empty($purArr)&&!empty($field))
		{
			$purArr=is_array($purArr)?array_filter($purArr,'LibFc::Int'):[(int)$purArr];
			if(!empty($purArr))
			{
				$res=$this->get('pl_purchase inner join pl_purchase_offer on po_pur_id=pur_id',$field,sprintf(' and pur_id in(%s)',implode(',',$purArr)).$where);
				return $res;
			}
		}
		return LibFc::ReturnData(false, 'getOfferPurchase提供的参数有误！');
	}
	/**
	 * @method    系统自动报价
	 * @param     [int]     $uid      [报价人id]
	 * @param     [int]     $purId    [报价单id]
	 * @param     [arr]     $checkArr [配件名称数组]  $checkArr=[
															0=>[
																'number'=> 'XYD133',
																'name'=>'刹车片刹车皮盘式片/大众,斯柯达,奔腾'
															]
														];
	 * @author lu
	 * @copyright 2018-11-05
	 */
	function autoOffer($uid,$purId,$checkArr)
	{
		if(!empty($uid)&&!empty($purId)&&is_array($checkArr))
		{
			$nameArr=[];
			if(!empty($checkArr))
			{
				foreach ($checkArr as $v) 
				{
					$nameArr[$v['number']]=$v['name'];
				}
			}
			if(!empty($nameArr))
			{
				$dataArr=[
					'uid'=>$uid,
					'data'=>$nameArr
				];
				$LibYpApi = new LibYpApi();
				$res=$LibYpApi->Get('b2c/getShopProduct', [], $dataArr);
				if(!empty($res['data']))
				{
					$shopArr=$res['data'];
					$shopIdArr=array_keys($shopArr);
					//获取正常运营的配件商
					$res=$this->get('pl_shop',['shop_pu_id','shop_id'],sprintf(' and shop_status=2 and shop_id in(%s)',implode(',',$shopIdArr)));
					$nowShopIdArr=array_column($res['data'], 'shop_id');
					$nowShopArr=array_column($res['data'],null, 'shop_id');
					if(!empty($nowShopIdArr))
					{
						//获取询价单发布者
						$res=$this->get('pl_shop',['shop_id','shop_b2c_shop_id'],sprintf(' and shop_pu_id=%d',$uid),true);
						$nowShop=!empty($res['data']['shop_id'])?$res['data']['shop_id']:0;
						//判断是否已经报过价
						$res=$this->get('pl_purchase_offer',['po_shop_id'],sprintf(' and po_pur_id=%d',$purId));
						$hasOffer=array_column($res['data'], 'po_shop_id');
						//获取询价单配件
						$res=$this->get('pl_purchase_product',['pup_id','pup_pur_id','pup_name','pup_number','pup_number_format','pup_count'],sprintf(' and pup_pur_id=%d',$purId));
						$proArr=array_column($res['data'],null, 'pup_name');
						foreach ($shopArr as $shopId => $v) 
						{
							if($nowShop!=$shopId&&in_array($shopId, $nowShopIdArr)&&!in_array($shopId, $hasOffer))
							{
								//排除自己的店铺,并且为正常运营的,并且为未报过价的
								$dataArr=[
									'po_pur_id'=>$purId,
									'po_opu_uid'=>$nowShopArr[$shopId]['shop_pu_id'],
									'po_shop_id'=>$shopId
								];
								$proVArr=[];
								$otherArr=[];
								foreach ($v as $pro) 
								{
									$proVArr[$proArr[$pro['pro_name']]['pup_id']]=[
										'品牌'=>$pro['price']
									];
									$otherArr[$proArr[$pro['pro_name']]['pup_id']]='系统自动报价';
								}
								$this->addPurchaseOffer($dataArr, $proVArr,$otherArr);
							}
						}
					}
				}
			}
			return LibFc::ReturnData(true, true);
		}
		return LibFc::ReturnData(false, 'autoOffer提供的参数有误！');
	}
	/**
	 * @method    根据询价单获取报价单价格列表
	 * @param     [int]             $purId [询价单id]
	 * @return    [type]                    [description]
	 * @author lu
	 * @copyright 2018-11-21
	 */
	function getOfferPriceByPur($purId)
	{
		if(LibFc::Int($purId))
		{
			$res=$this->get('pl_purchase_offer',['po_id','po_status','po_pur_id','po_opu_uid','po_shop_id'],sprintf(' and po_pur_id=%d',$purId));
			$data=$res['data'];
			if(!empty($data))
			{
				$proArr=array_column($data, 'po_id');
				$res=$this->getPorPrice($proArr);
				$priceArr=[];
				if(!empty($res['data']))
				{
					foreach ($res['data'] as $v) 
					{
						$priceArr[$v['pop_po_id']][]=$v;
					}
					foreach ($data as $k=>$v) 
					{
						$v['proArr']=!empty($priceArr[$v['po_id']])?$priceArr[$v['po_id']]:[];
						$data[$k]=$v;
					}
				}
			}
			return LibFc::ReturnData(true, $data);
		}
		return LibFc::ReturnData(false, 'getOfferPriceByPur提供的参数有误！');
	}
	/**
	 * @method    根据报价单id获取报价
	 * @param     [int|arr]      $proArr [报价单id]
	 * @return    [type]              [description]
	 * @author lu
	 * @copyright 2018-11-21
	 */
	function getPorPrice($proArr)
	{
		if(!empty($proArr))
		{

			$proArr=is_array($proArr)?array_filter($proArr,'LibFc::Int'):[(int)$proArr];
			$res=$this->get('pl_purchase_offer_price left join pl_purchase_product on pop_pup_id=pup_id',['pop_id','pop_po_id','pop_pup_id','pop_price','pop_remark','pup_pur_id','pup_name','pup_number','pup_count'],sprintf(' and pop_po_id in(%s)',implode(',',$proArr)));
			$data=$res['data'];
			if(!empty($data))
			{
				foreach ($data as $k => $v) 
				{
					$data[$k]['priceArr']=json_decode($v['pop_price'],true);
					unset($data[$k]['pop_price']);
				}
			}
			return LibFc::ReturnData(true, $data);
		}
		return LibFc::ReturnData(false, 'getPorPrice提供的参数有误！');
	}
}