<?php
class B2cComment extends B2cBase
{
	/**
	 * @method    卖家获取订单评论信息
	 * @param     [int]          $orderId [订单id]
	 * @param     [int]          $orderId [订单中的产品id]
	 * @param     [int]          $shopId  [卖家店铺id]
	 * @param     [int]          $orderId [用户id]
	 * @author    廖
	 * @copyright 2017-08-14
	 * @return    $data['all'=>['ord_evaluate_time'=>xxx,...],'pro'=>['ord_id'=>XXX,....]];
	 */
	public function getorderComInfo($orderIdArr)
	{
		$data = ['status'=>false,'data'=>'getorderComInfo 参数不正确！'];
		//获取订单的信息
		if(!empty($orderIdArr))
		{
			if(!is_array($orderIdArr)) $orderIdArr = explode(',',$orderIdArr);
			$orderIdArr = array_filter($orderIdArr,'LibFc::Int');
			if(!empty($orderIdArr))
			{
				//获取总订单的评价信息
				$dataArr = array();
				//获取总订单的信息
				$res = $this->get('or_order left join or_evaluate on ord_id=eva_ord_id',['ord_id','eva_service_score','eva_logistics_score','eva_courier_score','eva_suggest'],sprintf(' and ord_id in (%s)',implode(',',$orderIdArr)));
				// $buyerIdArr = array_column($res['data'],'ord_uid');
				//获取用户id
				// if(!empty($buyerIdArr))
				// {
				// 	$user = $this->get('us_user_base',['ub_uid','ub_username'],sprintf(' and ub_uid IN(%s)',implode(',',$buyerIdArr)));
				// 	$user = array_column($user['data'],'ub_username','ub_uid');
				// }
				// 订单配件
				$re = $this->get('or_order_product left join or_evaluate_product on orp_id=evp_orp_id',['orp_id','orp_ord_id','orp_pro_id','evp_id','evp_score','evp_comment','evp_add_time','evp_incognito','evp_shop_reply','evp_reply_time'],sprintf('and orp_ord_id in (%s)',implode(',',$orderIdArr))); 
				if(!empty($re['data']))
				{
					// $imgIdArr = array_unique(array_column($re['data'],'orp_pro_id'));
					$evpIdArr = array_filter(array_column($re['data'],'evp_id'));
					// if(!empty($imgIdArr))
					// {
					// 	//获取该商品的图片
					// 	$B2cProduct = new B2cProduct();
					// 	$pImgData = $B2cProduct->getProductPic($imgIdArr);
					// }
					if(!empty($evpIdArr))
					{
						//获取评论图片
						$imgArr = $this->get('or_evaluate_img',['evi_evi_id','evi_path','evi_name','evi_ext'],sprintf(' and evi_evi_id in (%s) order by evi_seq asc',implode(',',$evpIdArr)));
						$comImg = array();
						if(!empty($imgArr['data']))
						{
							foreach ($imgArr['data'] as $key => $value)
							{
								foreach ($imgArr['data'] as $k => $v)
								{
									if($value['evi_evi_id'] == $v['evi_evi_id'])
									{
										$comImg[$value['evi_evi_id']][$k] = $imgArr['data'][$k];
									}
								}
							}
						}
						//获取评论的标签
						$label = $this->get('or_evaluate_label_link left join or_evaluate_label on evl_id=ell_evl_id',['evl_id','evl_name','ell_evp_id'],sprintf(' and ell_evp_id in (%s)',implode(',',$evpIdArr)));
						$LabelArr = array();
						if(!empty($label['data']))
						{
							foreach ($label['data'] as $key => $value)
							{
								foreach ($label['data'] as $k => $v)
								{
									if($value['ell_evp_id'] == $v['ell_evp_id'])
									{
										$LabelArr[$value['ell_evp_id']][$k] = $v;
									}
								}
							}
						}
					}
					$proArr = [];
					foreach ($re['data'] as $key => $value)
					{
						foreach ($re['data'] as $k => $v)
						{
							if($value['orp_ord_id'] == $v['orp_ord_id'])
							{
								$proArr[$value['orp_ord_id']][$value['orp_pro_id']] = $re['data'][$key];
								// $proArr[$value['orp_ord_id']][$value['orp_pro_id']] = ;
								if(!empty($comImg[$value['evp_id']])) $proArr[$value['orp_ord_id']][$value['orp_pro_id']]['comimg'] = $comImg[$value['evp_id']];
								if(!empty($LabelArr[$value['evp_id']])) $proArr[$value['orp_ord_id']][$value['orp_pro_id']]['label'] = $LabelArr[$value['evp_id']];
							}
						}
					}
					// print_r($proArr);die;
					$allData = array_combine(array_column($res['data'],'ord_id'),$res['data']);
					//合并到总订单
					foreach ($allData as $key => $value)
					{
						$allData[$value['ord_id']]['pro']= $proArr[$value['ord_id']];
					}
					$data = ['status'=>true,'data'=>$allData];
				}
			}
		}
		return $data;
	}
	/**
	 * @method    评价 获取订单中全部的配件信息 //买家
	 * @param     [int]          $orderId 	订单id
	 * @param     [int]          $userId 	买家id
	 * @author     廖
	 * @copyright 2017-08-08
	 * @return    ['ord_id'=>xxx,['pro']=>['orp_pro_id'=>zzz,...],..]
	 */
	function getOrderProInfo($orderId,$proId=0,$userId)
	{
		$dataArr = array();
		if(LibFc::Int($userId))
		{
			//总订单进来
			if(LibFc::Int($orderId))
			{
				//检车总订单是否已经评价
				$ordCount = $this->get('or_evaluate',['count(*) as count'],' and eva_ord_id='.$orderId,true);
				//没有评价
				if($ordCount['data']['count']==0)
				{
					//获取该订单的店铺信息
					$re = $this->get('or_order left join sh_shop on ord_shop_id=shop_id',['ord_id','ord_shop_id','ord_add_time','ord_incognito','shop_name','shop_logo',],sprintf(' and ord_id=%d and ord_uid=%d',$orderId,$userId),true);
					$dataArr['ordAll'] = $re['data'];
				}else
				{
					$re = $this->get('or_order',['ord_id','ord_shop_id','ord_completed_time','ord_incognito'],sprintf(' and ord_id=%d and ord_uid=%d',$orderId,$userId),true);
					$dataArr['ordAll'] = $re['data'];
					$dataArr['ordAll']['isEva'] ='1';
				}
				//获取订单下的所有未评价配件信息
				$proData = $this->get('or_order_product left join or_evaluate_product on orp_id=evp_orp_id',['orp_id','orp_ord_id','orp_pro_id','orp_pro_name','orp_price'],sprintf(" and orp_ord_id=%d and orp_status='completed' and orp_evaluate=0",$orderId));
				if(!empty($proData['data']))
				{
					$B2cProduct = new B2cProduct();
					//所有的配件id
					$proIdArr = array_column($proData['data'], 'orp_pro_id');
					if(!empty($proIdArr))
					{
						//取出图片
						$pImgData = $B2cProduct->getProductPic($proIdArr,false);
						//取出标签
						$label = $this->get('or_evaluate_label_link left join or_evaluate_label on evl_id=ell_evl_id',['evl_id','evl_name','ell_pro_id'],sprintf(' and ell_pro_id in (%s)',implode(',', $proIdArr)));
						if(!empty($label['data']))
						{
							foreach ($label['data'] as $key => $value) 
							{
								if (!empty($value['evl_id']))
									$LabArr[$value['ell_pro_id']][$value['evl_id']] = $value;
							}
						}
					}
					foreach($proData['data'] as $Pk=>$Pv)
					{
						//获取该商品的图片
						$proData['data'][$Pk]['img'] =isset($pImgData['data'][$Pv['orp_pro_id']][0])? $pImgData['data'][$Pv['orp_pro_id']][0]:[];
						//标签 取出前十条
						$proData['data'][$Pk]['label'] = !empty($LabArr[$Pv['orp_pro_id']])?array_slice($LabArr[$Pv['orp_pro_id']],0,9):'';
					}
				}
				$dataArr['proAll'] = $proData['data'];
			}
			//单个订单商品进来
			if(LibFc::Int($orderId) && LibFc::Int($proId))
			{
				//检验该商品是否已经评价
				$pro = $this->get('or_order_product left join or_evaluate_product on orp_id=evp_orp_id',['orp_id','orp_ord_id','orp_pro_id','orp_pro_name','orp_price'],sprintf(" and orp_ord_id=%d and orp_pro_id=%d and orp_status='completed' and evp_id is null",$orderId,$proId),true);
				$dataArr['ordAll'] = '';
				//获取配件图片
				$B2cProduct = new B2cProduct();
				$pImgData = $B2cProduct->getProductPic($pro['data']['orp_pro_id'],false);
				$pro['data']['img'] = $pImgData['data'];
				//获取配件标签
				$label = $this->get('or_evaluate_label_link left join or_evaluate_label on evl_id=ell_evl_id',['evl_id','evl_name'],sprintf(' and ell_pro_id=%d',$pro['data']['orp_pro_id']));
				$pro['data']['label'] = $label['data'];
				$dataArr['proAll'] = $pro['data'];
			}
		}
		return $dataArr;	
	}

	/**
	 * @method    保存评价信息
	 * @param     [array]      	$comArr  
	 * @param     [int]        	$userId   	[用户id]
	 * @param     [int]        	$orderId  	[订单id]
	 * @param     [int]       	$shopId   	[店铺id]
	 * @param     [int]       	$proId   	[配件id]
	 * @param     [类型]       	$order    	[头部服务 | 配件评价]
	 * @return    [array]                	['status'=>true,'data'=> xxxx]
	 * @author     liao
	 * @copyright 2018-07-24
	 */
	function saveComment($comArr,$userId,$orderId,$shopId,$proId,$order)
	{
		if (!empty($comArr) && is_array($comArr) && LibFc::Int($userId) && LibFc::Int($orderId) && LibFc::Int($shopId))
		{
			//查看该用户是否拥有该订单
			$res = $this->get('or_order',['count(*) as count'],sprintf('and ord_id = %s and ord_uid = %s',$orderId, $userId),true);
			if ($res['data']['count'] > 0)
			{
				switch ($order) 
				{
					case 'order':
						if (!LibFc::Int($comArr['eva_service_score']))
							return LibFc::ReturnData(['status'=>false,'data'=>'服务评分不正确！']);
						if (!LibFc::Int($comArr['eva_logistics_score']))
							return LibFc::ReturnData(['status'=>false,'data'=>'物流评分不正确！']);
						if (!LibFc::Int($comArr['eva_courier_score']))
							return LibFc::ReturnData(['status'=>false,'data'=>'快递员评分不正确！']);

						$this->B2CDb->Begin();
						$dataArr = [
							'eva_ord_id'=>$orderId,
							'eva_shop_id'=>$shopId,
							'eva_service_score'=>$comArr['eva_service_score'],
							'eva_logistics_score'=>$comArr['eva_logistics_score'],
							'eva_courier_score'=>$comArr['eva_courier_score'],
							'eva_add_time'=>time(),
							'eva_suggest'=>$comArr['eva_suggest'],
							'eva_incognito'=>$comArr['eva_incognito']?'1':'0',
							'eva_uid'=>$userId
						];
						$this->add('or_evaluate',$dataArr);
						//更新店铺服务评分
						$res = $this->get('or_evaluate',['avg(eva_service_score) shop_service_score','avg(eva_logistics_score) shop_logistics_score'],'and eva_shop_id='.$shopId,true);
						$re = $this->get('or_evaluate_product left join bc_product on evp_pro_id=pro_id',['avg(evp_score) shop_describe_score'],'and pro_shop_id='.$shopId,true);
						$data = array_merge($res['data'],$re['data']);
						$this->Set('sh_shop',$data,'and shop_id='.$shopId);
						//更新订单表的信息
						$this->Set('or_order',['ord_evaluate_time'=>time(),'ord_evaluate'=>1],' and ord_id='.$orderId);
						$this->B2CDb->End();
						break;
					
					case 'product':
						if (LibFc::Int($proId))
						{
							//查询该配件是信息是否合法
							$res = $this->get('or_order_product',['orp_id'],sprintf('and orp_ord_id = %s and orp_pro_id = %s', $orderId, $proId),true);
							if (!empty($res['data']['orp_id']))
							{
								$autoProId = $res['data']['orp_id'];
								//新增标签
								$newLabelArr = [];
								if(is_array($comArr['or_evaluate_label']) && !empty($comArr['or_evaluate_label']))
								{
									$newLabelArr = array_filter(array_map('LibFc::Escape',$comArr['or_evaluate_label']));
								}
								$labelIdArr = [];
								if(!empty($newLabelArr))
								{
									//向数据库中查询标签的名有没有
									$labeUni = $this->get('or_evaluate_label',['*'],sprintf(" and evl_name in ('%s')",implode("','", $newLabelArr)));
									//已有标签名
									$hasLab = array_column($labeUni['data'], 'evl_name','evl_id');
									$labelIdArr = array_keys($hasLab);
									//未有标签名
									$noLab = array_diff($newLabelArr,$hasLab);
								}

								$this->B2CDb->Begin();
								$dataArr =[
									'evp_orp_id'=>$res['data']['orp_id'],
									'evp_score'=>$comArr['evp_score'],
									'evp_comment'=>$comArr['evp_comment'],
									'evp_add_time'=>time(),
									'evp_pro_id'=>$proId,
									'evp_uid'=>$userId,
									'evp_incognito'=>$comArr['evp_incognito']?'1':'0'
								];
								$re = $this->add('or_evaluate_product',$dataArr);


								//更新配件评分
								$res = $this->get('or_evaluate_product',['avg(evp_score) count'],'and evp_pro_id='.$proId,true);
								$this->Set('bc_product',['pro_describe_score'=>$res['data']['count']],' and pro_id='.$proId);
								//更新店铺相符描述评分
								$res = $this->get('or_evaluate_product left join bc_product on evp_pro_id=pro_id',['avg(evp_score) count'],'and pro_shop_id='.$shopId,true);
								$this->Set('sh_shop',['shop_describe_score'=>$res['data']['count']],' and shop_id='.$shopId);

								$this->Set('or_order_product',['orp_evaluate'=>1],' and orp_id='.$autoProId);
								//标签新增
								if(!empty($noLab))
								{
									foreach($noLab as $labV)
									{
										$labelId = $this->add('or_evaluate_label',['evl_name'=>$labV]);
										$labelIdArr[] = $labelId['data']; 
									}
								}
								//关联标签
								if(!empty($comArr['or_evaluate_label_link']))
								{
									$arr = array_filter(explode(',',trim($comArr['or_evaluate_label_link'],',')),'LibFc::Int');
									$labelIdArr = array_unique(array_merge($labelIdArr, $arr));
								}
								if (!empty($labelIdArr))
								{
									foreach($labelIdArr as $lebVal)
									{
										if(LibFc::Int($lebVal))
										{
											$dataArr3 = [
												'ell_evp_id'=>$re['data'],
												'ell_pro_id'=>$proId,
												'ell_evl_id'=>$lebVal
											];
											$this->add('or_evaluate_label_link',$dataArr3);
										}
									}
								}
								//评论图片
								if(!empty($comArr['or_evaluate_img']) && is_array($comArr['or_evaluate_img']))
								{
									foreach($comArr['or_evaluate_img'] as $Ikey=>$Ival)
									{
										if($Ival !='')
										{
											$imgArr = json_decode($Ival,true);
											$dataArr4 = [
												'evi_evi_id'=>$re['data'],
												'evi_path'=>$imgArr['path'],
												'evi_name'=>$imgArr['name'],
												'evi_ext'=>$imgArr['ext'],
												'evi_crc32'=>$imgArr['crc32'],
												'evi_filesize'=>$imgArr['size'],
												'evi_atime'=>time(),
												'evi_seq'=>$Ikey
											];
											$imgId = $this->add('or_evaluate_img',$dataArr4);
										}
									}
								}
								$this->B2CDb->End();
							}
						}else
						{
							return LibFc::ReturnData(['status'=>false,'data'=>'参数不正确']);
						}
						break;
					default:
						return LibFc::ReturnData(['status'=>false,'data'=>'参数不正确']);
				}
				return LibFc::ReturnData(['status'=>true,'data'=>true]);
			}
		}
		return LibFc::ReturnData(['status'=>false,'data'=>'参数不正确']);
	}
}
?>