<?php
/**
  * @method 跑街令 采购单 与 报价
  * @author soul
  * @copyright 2018/7/23
  */
class PjlPurchase extends PjlBase
{
	public function __construct()
	{
		parent::__construct();
		LibFc::useMainDb();
	}

	//将配件加入到采购购物车，返回最新的购物车数量
	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'];

		$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, '请填写配件名称！');
		$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'], 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();
			// $PjlUser->changeUserCredit($uid, $score, '取消询价');
			$this->PjlDb->End();
			return LibFc::ReturnData(true);
		}
		return LibFc::ReturnData(false, 'setPurchaseStatus提供的参数有误！');
	}


	/**
	  * @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();
			$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);
			}
			$this->PjlDb->End();
			return LibFc::ReturnData(true, $poId);
		}
		return LibFc::ReturnData(false, 'addPurchaseOffer提供的参数有误！');
	}


	/**
	  * @method 关闭报价单
	  * @param  $uid 采购单所属人
	  * @param  $purId 采购单
	  * @param  $status 关闭-1  完成1
	  * @author soul
	  * @copyright 2018/7/23
	  * @return ["status"=> bool(true), "data"=>, "code"=>""]
	  */
	public function closePurchaseOffer($poId, $uid)
	{
		$uid = (int) $uid;
		$poId = (int) $poId;
		if($uid > 0 && $poId > 0)
		{
			$setArr = ['po_status'=>-1, 'po_close_time'=>time(), 'po_close_uid'=>$uid];
			$this->set('pl_purchase_offer', $setArr, sprintf(" and po_id=%d", $poId));
			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();
				if(!empty($purInfo['proArr']))
				{
					$purInfo['title']=implode(',',array_column($purInfo['proArr'], 'pup_name'));
				}
				$purInfo['userArr']=[];
				$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','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'],sprintf('and shop_id in (%s)',implode(',', $shopIdArr)));
							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'];
							}
							$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'];
								$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));
			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['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     [arr]     $purArr [询价单id]
	 * @param     string     $remark [备注] 待处理
	 * @return    [type]             [description]
	 * @author lu
	 * @copyright 2018-11-12
	 */
	function deletePur($purArr,$remark='')
	{
		if(!empty($purArr))
		{
			$res=$this->get('pl_purchase_offer',['po_id'],sprintf(' and po_pur_id in(%s)',implode(',', $purArr)));
			$poArr=array_column($res['data'], 'po_id');
			$this->PjlDb->Begin();
			$this->del('pl_purchase',sprintf(' and pur_id in(%s)',implode(',', $purArr)));
			$this->del('pl_purchase_product',sprintf(' and pup_pur_id in(%s)',implode(',', $purArr)));
			if(!empty($poArr))
			{
				$this->del('pl_purchase_offer',sprintf(' and po_pur_id in(%s)',implode(',', $purArr)));
				$this->del('pl_purchase_offer_price',sprintf(' and pop_po_id in(%s)',implode(',', $poArr)));
			}
			$this->PjlDb->End();
			return LibFc::ReturnData(true, true);
		}
		return LibFc::ReturnData(false, 'deletePur提供的参数有误！');
	}
	/**
	 * @method    获取报价单列表
	 * @param     string       $where   [条件]
	 * @param     string       $orderBy [排序]
	 * @param     string       $limit   [限定]
	 * @return    [type]                [description]
	 * @author lu
	 * @copyright 2018-11-12
	 */
	function getOfferList($where='',$orderBy=' order by po_id desc',$limit='')
	{
		$res=$this->get('pl_purchase_offer',['po_id','po_status','po_pur_id','po_opu_uid','po_shop_id','po_atime','po_read','po_read_time','po_close_time','po_close_uid'],$where.$orderBy.$limit);
		$offArr=$res['data'];
		$offPro=array_filter(array_column($res['data'], 'po_id'));
		$purArr=array_filter(array_column($res['data'], 'po_pur_id'));
		$userIdArr=array_filter(array_column($res['data'], 'po_opu_uid'));
		$shopIdArr=array_filter(array_column($res['data'], 'po_shop_id'));
		if(!empty($offPro))
		{
			//询价单图片
			if(!empty($purArr))
			{
				$res=$this->get('pl_purchase right join pl_purchase_product on pup_pur_id=pur_id',['pur_imgs','pur_id','pup_name'],sprintf(' and pur_id in(%s)',implode(',',$purArr)));
				if(!empty($res['data']))
				{
					foreach ($res['data'] as $v) 
					{
						$tempImgArr=[];
						if(!empty($v['pur_imgs']))
						{
							$tempImg=$v['pur_imgs'];
							$tempImgArr=array_filter(explode(',',$tempImg));
						}
						$imgArr[$v['pur_id']]=$tempImgArr;
						$titleArr[$v['pur_id']][]=$v['pup_name'];
					}
				}
			}
			//报价配件
			$res=$this->getOferPro($offPro);
			if(!empty($res['data']))
			{
				foreach ($res['data'] as $v) 
				{
					$offProArr[$v['pop_po_id']][]=$v;
				}
			}
			if(!empty($userIdArr))
			{
				//报价人
				$post = [
					'filed'=>['u_id','u_name', 'u_nickname', 'u_real_name', 'u_logo'],
					'where'=>sprintf(" and u_id in (%s)", implode(',', $userIdArr)),
				];

				$YpwUser = new YpwUser();
				$res = $YpwUser->GetUser($post['filed'], $post['where'], false);
				$userArr=array_column($res['data'], null,'u_id');
			}
			if(!empty($shopIdArr))
			{
				//店铺
				$res=$this->get('pl_shop',['shop_id','shop_status','shop_style','shop_logo','shop_name'],sprintf(' and shop_id in(%s)',implode(',',$shopIdArr)));
				$shopArr=array_column($res['data'],null, 'shop_id');
			}
			foreach ($offArr as $k=>$v) 
			{
				$v['proArr']=!empty($offProArr[$v['po_id']])?$offProArr[$v['po_id']]:[];
				$v['imgArr']=!empty($imgArr[$v['po_pur_id']])?$imgArr[$v['po_pur_id']]:[];
				$v['userArr']=!empty($userArr[$v['po_opu_uid']])?$userArr[$v['po_opu_uid']]:[];
				$v['shopArr']=!empty($shopArr[$v['po_shop_id']])?$shopArr[$v['po_shop_id']]:[];
				$v['pur_title']=!empty($titleArr[$v['po_pur_id']])?implode(',',$titleArr[$v['po_pur_id']]):'';
				$offArr[$k]=$v;
			}
		}
		return LibFc::ReturnData(true, $offArr);
	}
	/**
	 * @method    获取报价单产品
	 * @param     [arr]     $offArr [报价单id]
	 * @return    [type]             [description]
	 * @author lu
	 * @copyright 2018-11-12
	 */
	function getOferPro($offArr)
	{
		if(!empty($offArr))
		{
			$res=$this->get('pl_purchase_offer_price',['pop_id','pop_po_id','pop_pup_id','pop_price','pop_remark'],sprintf(' and pop_po_id in(%s)',implode(',',$offArr)));
			return $res;
		}
		return LibFc::ReturnData(false, 'getOferPro提供的参数有误！');
	}
	/**
	 * @method    删除报价单
	 * @param     [arr]     $offArr [报价单id]
	 * @param     string     $remark [备注] 待处理
	 * @return    [type]             [description]
	 * @author lu
	 * @copyright 2018-11-12
	 */
	function deleteOff($offArr,$remark='')
	{
		if(!empty($offArr))
		{
			$this->PjlDb->Begin();
			$this->del('pl_purchase_offer',sprintf(' and po_id in(%s)',implode(',', $offArr)));
			$this->del('pl_purchase_offer_price',sprintf(' and pop_po_id in(%s)',implode(',', $offArr)));
			$this->PjlDb->End();
			return LibFc::ReturnData(true, true);
		}
		return LibFc::ReturnData(false, 'deleteOff提供的参数有误！');
	}


	/**
	  * @method 将宜配网的求购同步到跑街令询价单
	  * @http  get
	  * @param  b_id	   int [必填] 宜配求购ID
	  * @author soul
	  * @copyright 2024/3/12
	  * @return 
	  */
	public function synYpBuyToPjl($b_id)
	{
		$YpwBase = new YpwBase();
		$res = $YpwBase->get('yp_buy', ['*'], sprintf(" and b_id=%d and b_check > 1", $b_id), true);
		if(empty($res['data'])) return LibFc::ReturnData(true, 0);
		
		$buyArr = $res['data'];
		$res = $this->get('pl_purchase', ['pur_id'], sprintf(" and pur_from='yiparts' and pur_from_id=%d", $b_id), true);
		if(!empty($res['data'])) return LibFc::ReturnData(true, $res['data']['pur_id']);
		
		$purArr = [
			'pur_pu_id'=>$buyArr['b_uid'],
			'pur_model'=>$buyArr['b_title'],
			'pur_remark'=>LibFc::msubstr($buyArr['b_des'], 0, 200),
			'pur_pct_ids'=>$buyArr['b_province'].','.$buyArr['b_city'],
			'pur_iscall'=>1,
			'pur_tel'=>$buyArr['b_tel'],
			'pur_pro_count'=>$buyArr['b_count'],
			'pur_from'=>'yiparts',
			'pur_from_id'=>$buyArr['b_id'],
			'pur_atime'=>$buyArr['b_atime'],
		];

		$this->PjlDb->Begin();
		$PjlUser = new PjlUser();
		$PjlUser->initUser($buyArr['b_uid']);
		$res = $this->add('pl_purchase', $purArr);
		$pur_id = $res['data'];

		$res = $YpwBase->get('yp_buy_number', ['*'], sprintf(" and bn_bid=%d", $buyArr['b_id']));
		if(empty($res['data'])){
			$add = [
				'pup_pur_id'=>$pur_id,	
				'pup_name'=>$buyArr['b_title'],	
				'pup_count'=>1
			];
			$this->add('pl_purchase_product', $add);
		}else{
			foreach($res['data'] as $v){
				$add = [
					'pup_pur_id'=>$pur_id,	
					'pup_name'=>$v['bn_part'],	
					'pup_number'=>$v['bn_num'],	
					'pup_number_format'=>LibFc::FormatNum($v['bn_num']),	
					'pup_count'=>$v['bn_count']
				];
				$this->add('pl_purchase_product', $add);
			}
		}
		$this->PjlDb->End();
		return LibFc::ReturnData(true, $pur_id);
	}
}