<?php
/**
 * 快递接口
 */
class B2cExpress extends B2cBase
{
	/**
	 * @method    获取快递公司信息
	 * @param     boolean    $cache [是否取缓存默认为读取缓存]
	 * @return    [[325=>['exp_code'=>325,'exp_name'=>圆通...]]
	 * @author 卢
	 * @copyright 2017-08-23
	 */
	public function getExpress($cache = true)
	{
		$file = mvc::$cfg['AUTOLOAD']['B2c']['path'].'cache/allExpress.php';
		$resArr = [];
		if(!file_exists($file) || !$cache)
		{
			// echo 123;
			$LibYpApi = new LibYpApi();
			$resArr = $LibYpApi->Get('express/getExpress', ['type'=>'all']);
			foreach ($resArr['data'] as $k => $v) 
			{
				$data[$v['exp_code']]=$v;
			}
			LibFc::ArraySave($data, $file);
		}
		else
		{//括起来为了防止读取文件失败
			$data = include($file);
		}
		return LibFc::ReturnData(true, $data);
	}
	/**
	 * @method    获取物流信息
	 * @param     [int|array]           $expId [物流信息id]数组 或者单个整形
	 * @param     [bool]           		默认最新的在前 $seq true 顺序物流 false 倒序物流
	 * @author     廖
	 * @copyright 2017-08-28
	 * @return   array('extid'=>xxx,'extNum'=>xxx,..)
	 */
	public function getLogisticInfo($expId,$seq=false)
	{
		if(!empty($expId))
		{
			if(!is_array($expId)) $expId = explode(',',LibFc::int($expId));				
			$expId = array_filter($expId,'LibFc::Int');
			$data = array();
			if(!empty($expId))
			{
				$LibYpApi = new LibYpApi();
				$YpwAddr = new YpwAddr();
				$reExp = $this->get('or_express_track',['*'],sprintf(' and ext_id in (%s)',implode(',', $expId)));
				//检查是否同单号
				if(!empty($reExp['data']))
				{
					$newSame = [];
					foreach ($reExp['data'] as $key => $value) 
					{
						foreach ($reExp['data'] as $key1 => $value1) 
						{
							if($key != $key1)
							{
								if($reExp['data'][$key]['ext_exp_code']==$reExp['data'][$key1]['ext_exp_code'] && $reExp['data'][$key]['ext_exp_number']==$reExp['data'][$key1]['ext_exp_number'])
								{
									$newSame[$reExp['data'][$key]['ext_id']][] = $reExp['data'][$key1]['ext_id'];
									unset($reExp['data'][$key1]);
								}
							}
						}
					}
				}
				$reExp = array_combine(array_column($reExp['data'], 'ext_id'), $reExp['data']);
				if(!empty($reExp))
				{	
					//获取缓存中快递公司的信息
					$exp = $this->getExpress();
					foreach ($reExp as $key => $value) 
					{
						//整合物流公司信息
						if(is_array($exp['data'][$value['ext_exp_code']])) $reExp[$key] = array_merge($reExp[$key],$exp['data'][$value['ext_exp_code']]);
						//获取最新物流信息
						$dataArr = [
							'ext_exp_code'=>$value['ext_exp_code'],
							'ext_number'=>$value['ext_exp_number'],
							'ext_from'=>'B2C'
						];
						$resArr = $LibYpApi->Get('express/getTrack',$dataArr);
						if(!empty($resArr['data']['ext_track']) && $resArr['data']['ext_track'] !='[]')
						{
							$this->set('or_express_track',['ext_track'=>$resArr['data']['ext_track'],'ext_track_tatus'=>$resArr['data']['ext_status'],'ext_set_time'=>time()],' and ext_id='.$value['ext_id'],['ext_track']);
							$reExp[$key]['ext_track'] = $resArr['data']['ext_track'];
							$reExp[$key]['ext_track_tatus'] = $resArr['data']['ext_status'];
						}
						// json 转成数组	
						if(!empty($reExp[$key]['ext_track']))
						{
							$exparr = json_decode($reExp[$key]['ext_track'],true);
							if($seq && !empty($exparr))
							{
								$exparr = array_reverse($exparr);
							} 
							$reExp[$key]['ext_track'] = $exparr;
						}
						if(!empty($reExp[$key]['ext_send_addr']))
						{
							$addStr = json_decode($reExp[$key]['ext_send_addr'],true);
							$reExp[$key]['ext_send_addr'] = $addStr;
							$addres = $YpwAddr->getAddrByIds($addStr['addr_pct_ids']);
							$reExp[$key]['ext_send_addr']['addr_pct_ids'] = $addres['data'];
						}
						$reExp['same'] = $newSame;
					}
				}
			}
			return LibFc::ReturnData(true, $reExp);
		}else
		{
			return LibFc::ReturnData(false, '参数不正确');
		}
	}
	/**
	 * @method    物流状态
	 * @author     廖
	 * @copyright 2017-08-30
	 * @return array('0'=>xxx,'1'=>xxx,...)
	 */
	public function expressStatus()
	{
		$status=array(
			'0'=>'无数据',
			'1'=>'揽件中',
			'2'=>'在途中',
			'3'=>'派件中',
			'4'=>'已签收', 
			'5'=>'已退签',
			'6'=>'退回件',
			'7'=>'疑难件'
			);
		return $status;
	}

}