<?php
class orderAction extends baseAction
{

	//默认显示列
	private $columnArrDefault=[
		'orderDes'=>'配件详情',
		'proPrice'=>'价格',
		'num'=>'数量',
		// 'shop'=>'店铺',
		'user'=>'买家信息',
		// 'orderPrice'=>'订单金额',
		'time'=>'下单时间',
	];
	// 全部列
	private $columnArr=[
		'shop'=>'店铺',
		// 'orderPrice'=>'订单金额',
		'orderDes'=>'配件详情',
		'proPrice'=>'价格',
		'num'=>'数量',
		'shopUser'=>'店铺账号',
		'user'=>'买家信息',
		'time'=>'下单时间',
		'mainName'=>'负责人',
		'mainNameTel'=>'负责人电话'
	];
	// 宽度控制
	private $columnArrWidth=[
		'orderDes'=>420,
		'proPrice'=>60,
		'num'=>50,
		'back'=>100,
		'user'=>80,
		// 'orderPrice'=>80,
		// 'shop'=>130,
		'shopUser'=>50,
		'orderId'=>80,
		'status'=>60,
		'time'=>150,
		'mainName'=>100,
		'mainNameTel'=>100
	];

	// JavaScript对象构建
	private $data=[
		['name'=>'配件详情','id'=>'orderDes'],
		['name'=>'价格','id'=>'proPrice'],
		['name'=>'数量','id'=>'num'],
		// ['name'=>'店铺','id'=>'shop'],
		['name'=>'店铺账号','id'=>'shopUser'],
		['name'=>'买家信息','id'=>'user'],
		// ['name'=>'订单金额','id'=>'orderPrice'],
		['name'=>'下单时间','id'=>'time'],
		['name'=>'负责人','id'=>'mainName'],
		['name'=>'负责人电话','id'=>'mainNameTel'],
	];
	private $paramsArr=[
		'id'=>'showColumn',
		'type'=>'checkbox',
		'show_name'=>'name',
		'width'=>85,
		'data_key'=>'id',
		'data_value'=>['key','id'],
		'data_check'=>['pro_id','pro_status'],
		'callback'=>'putIntoCheckColumn',
		'unCheckCallback'=>'putIntoCheckColumn',
	];

	/**
	 * @订单主页
	 * @author 卢
	 * @copyright 2018.1.5
	 */
	function index()
	{
		LibRule::Check('OL01');
		LibTpl::Set('title','订单列表-跑街的');
		LibTpl::Put();
	}

	/**
	 * @订单列表
	 * @author 卢
	 * @copyright 2018.1.5
	 */
	function orderList()
	{
		$B2cOrder=new B2cOrder();
		$B2cBase=new B2cBase();
		$B2cProduct=new B2cProduct();
		$Params = MVC::$URL_PARAMS;
		$page=isset($Params['page'])?$Params['page']:1;
		$perPage=isset($_COOKIE['perPage'])? $_COOKIE['perPage'] : 20;

		// 全部列
		$columnArr = $this->columnArr;
		LibTpl::Set('columnArr',$columnArr);

		if(!isset($_SESSION['showColumns']))
		{	
			// 没有session就按默认进行显示
			$columnArrDefault = $this->columnArrDefault;
			$_SESSION['showColumns'] = array_keys($columnArrDefault);
		}
		else
		{
			if(isset($Params['showColumn']))
			{	
				// 存在get参数的时候就更改session,否则继续按照session区域展示列表
				$_SESSION['showColumns'] = array_filter(explode(',', $Params['showColumn']));
			}
		}
		LibTpl::Set('columnShow',$_SESSION['showColumns']);

		// 显示宽度控制
		$columnArrWidth = $this->columnArrWidth;
		LibTpl::Set('columnArrWidth',$columnArrWidth);

		// table宽度
		$width = 0;
		foreach ($_SESSION['showColumns'] as $key => $value) {
			$width += $columnArrWidth[$value];
		}
		LibTpl::Set('width',($width+450).'px');

		//售后订单
		$where='';
		$reOrder=$B2cBase->getFieldUniVal('or_order left join or_order_product on ord_id=orp_ord_id','orp_ord_id'," and (orp_refund_status is not null or orp_refund_status!='')");
		//状态
		switch ($Params['status']) {			
			case 'creat':
				$where.=" and ord_status='creat'";
				break;
			case 'paied':
				$where.=" and ord_status='paied'";
				break;
			case 'send':
				$where.=" and ord_status='send'";
				break;
			case 'cancel':
				$where.=" and ord_status='cancel'";
				break;
			case 'refund':
				if(count($reOrder['data']))
				{
					$where.=sprintf(' and ord_id in (%s)',implode(',',$reOrder['data']));
				}
				else
				{
					$where.=' and ord_id<-1';
				}
				break;			
			case 'completed':
				$where.=" and ord_status='completed'";
				break;
		}
		//订单号
		if(isset($Params['orderId'])&&(int)$Params['orderId'])
		{
			$where.=sprintf(' and ord_id=%d',(int)$Params['orderId']);
		}
		//关键字
		if(isset($Params['keyWord'])&&!empty($Params['keyWord']))
		{
			$keywordArr=LibFc::keyword($Params['keyWord']);
			if(count($keywordArr))
			{
				$keywordStr="'".implode("','",$keywordArr)."'";
				$keywordWhere=sprintf(' and key_txt in (%s)',$keywordStr);
				$keywordProData=$B2cProduct->get('bc_keyword right join bc_product_keyword on prk_key_id=key_id',['prk_pro_id'],$keywordWhere);
			}
			if(!count($keywordArr)||!count($keywordProData['data']))
			{
				//搜索为空，返回
				$where.=' and ord_id<-1';
			}
			else
			{
				$keywordPro=array_unique(array_column($keywordProData['data'],'prk_pro_id'));
				$where.=count($keywordPro)?sprintf(" and orp_pro_id in (%s)",implode(',',$keywordPro)):'';
			}
		}

		// 选中
		if(!empty($Params['checkedId']))
		{
			$data = urldecode($Params['checkedId']);
			$data = explode('&', $data);
			$checkIds = [];
			foreach ($data as $key => $value) {
				$checkIds[] = end(explode("=", $value));
			}
			$checkIds = array_filter($checkIds);
			if(!empty($checkIds))
				$where.=sprintf(' and ord_id in (%s)',implode(',', $checkIds));
		}


		//配件ID
		if(isset($Params['proId'])&&(int)$Params['proId'])
		{
			$where.= sprintf(' and orp_pro_id=%d', (int)$Params['proId']);
		}
		//用户名
		if(isset($Params['userName'])&&!empty($Params['userName']))
		{
			$uidArr=$B2cBase->getFieldUniVal('us_user_base', 'ub_uid', sprintf(" and ub_username like '%%%s%%' ",LibFc::Escape($Params['userName'])));
			// print_r($uidArr);
			// die;
			$where.=(count($uidArr['data'])?sprintf(' and ord_uid in (%s)',implode(',', $uidArr['data'])):' and ord_id<-1');
		}
		//店铺
		/*if(isset($Params['shopId'])&&(int)$Params['shopId'])
		{
			$where.=sprintf(' and ord_shop_id=%d',(int)$Params['shopId']);
		}*/

		if(!empty($Params['shopName']))
		{
			$where.=sprintf(" and ord_shop_id in (select shop_id from sh_shop where shop_name like '%%%s%%')", LibFc::Escape($Params['shopName']));
		}
		
		//时间段
		$where.=(int)strtotime(str_replace('T',' ',$Params['addTime']))?sprintf('and ord_add_time >=%d',(int)strtotime(str_replace('T', ' ',$Params['addTime']))):'';
		//排序
		$order=[];
		switch ($Params['orderBy']) 
		{
			case 'tasc':
				array_push($order, 'ord_add_time asc');
				break;
			case 'tdesc':
				array_push($order, 'ord_add_time desc');
				break;
			case 'mdesc':
				array_push($order, 'ord_pay_money desc');
				break;
			case 'masc':
				array_push($order, 'ord_pay_money asc');
				break;
			default:
				array_push($order, 'ord_add_time desc');
				break;
		}
		$order=implode(',',$order);
		$where.=strtotime(str_replace('T', ' ', $Params['endTime']))?sprintf(' and ord_add_time <=%d',strtotime(str_replace('T', ' ', $Params['endTime']))):'';
		$orderData = $B2cOrder->getOrderList($page,$perPage,$order,$where);
		LibTpl::Set('orderList',$orderData['data']);
		$Page = LibPage::Show($orderData['data'][0]['total'], $perPage);
		LibTpl::Set('Page', $Page);
		LibTpl::Set('title','订单列表-跑街的');
		LibTpl::Put();
	}



	/**
	 * @订单搜索表单
	 * @author xu
	 * @copyright 2018.1.5
	 */
	function orderSearch()
	{
		$B2cShop=new B2cShop();
		//店铺
		$shopData=$B2cShop->Get('sh_shop',array('shop_id','shop_name'), 'order by shop_name');
		LibTpl::Set('shopArr',$shopData['data']);
		
		$data = $this->data;
		$paramsArr = $this->paramsArr;
		if(isset($_SESSION['showColumns']))
		{
			foreach ($data as $k=> $v) 
			{
				if(in_array($v['id'], $_SESSION['showColumns']))
				{
					$data[$k]['check']=true;
				}
			}
		}
		LibTpl::Set('params',$paramsArr);
		LibTpl::Set('data',$data);		
		LibTpl::Set('partArr',$res['data']);
		LibTpl::Set('title','订单列表-跑街的');
		LibTpl::Put();
	}


	/**
	 * @选中商品
	 * @author 卢
	 * @copyright 2018.1.5
	 */
	function ajaxProCheck()
	{
		
		if(count($_POST))
		{
			$orderId=trim($_POST['ChkIds'],',');
			$notCheck=trim($_POST['NotChkIds'],',');
			if(isset($_SESSION['ChkOrderIds']))
			{
				$_SESSION['ChkOrderIds']=array_unique(array_merge(explode(',', $orderId),$_SESSION['ChkOrderIds']));
				foreach ($_SESSION['ChkOrderIds'] as $k => $v) 
				{
					if(in_array($v, explode(',', $notCheck)))
					{
						unset($_SESSION['ChkOrderIds'][$k]);
					}
				}
			}
			else
			{
				$_SESSION['ChkOrderIds']=explode(',', $orderId);
			}
			$B2cOrder=new B2cOrder();
			$orderId=trim(implode(',', $_SESSION['ChkOrderIds']),',');
			if(!empty($orderId))
			{
				$where=sprintf(' and ord_id in (%s) order by ord_shop_id desc,ord_add_time desc',$orderId);
				$res=$B2cOrder->Get('or_order left join or_order_product on ord_id=orp_ord_id',['orp_pro_name','orp_pro_id','ord_id'],$where);
				$result=[];
				foreach ($res['data'] as $v) 
				{
					$result[$v['ord_id']][]=$v;
				}
			}
			// print_r($result);
			$data=array('status'=>true,'data'=>array('check'=>$result));
			LibFc::ajaxJsonEncode($data);
		}
	}

	/**
	 * @更新选中
	 * @author 卢
	 * @copyright 2018.1.5
	 */
	function updateCheck()
	{
		if(!is_array($_POST['checkOrderId']))
		{
			$orderId=trim($_POST['checkOrderId'],',');
			$orderId=[$orderId];
		}
		else
		{
			$orderId=$_POST['checkOrderId'];
		}
		if(isset($_SESSION['ChkOrderIds']))
		{
			foreach ($_SESSION['ChkOrderIds'] as $k => $v) 
			{
				if(in_array($v, $orderId))
				{
					unset($_SESSION['ChkOrderIds'][$k]);
				}
			}
		}
		LibFc::ajaxJsonEncode(array('status'=>true,'data'=>true));
	}

	/**
	 * @发送短信告知当前订单状态
	 * @author 卢
	 * @copyright 2018.1.5
	 */
	function sendOrdStatBySms()
	{
		// LibRule::Check('OL02');//权限校验
		if(!empty($_POST['ordId']) && LibFc::Int($_POST['ordId']))
		{
			$B2cOrder = new B2cOrder();
			$B2cOrder->sendOrdStatBySms($_POST['ordId']);
			LibFc::ajaxJsonEncode(array('status'=>true,'data'=>true));
		}
	}

	
	/**
	 * @排序取消
	 * @author 卢
	 * @copyright 2018.1.5
	 */
	function cancelOrder()
	{
		LibRule::Check('OL02');
		if(count($_POST['checkOrderId']))
		{
			$idArr=array_filter($_POST['checkOrderId'],'LibFc::Int');
			$B2cOrder=new B2cOrder();
			$B2cOrder->adminCancelOrder($idArr);
			LibFc::ajaxJsonEncode(array('status'=>true,'data'=>true));
			exit();
		}
		LibFc::ajaxJsonEncode(array('status'=>false,'data'=>'取消订单失败，请稍后重试'));
	}


	/**
	 * @订单详情
	 * @author 卢
	 * @copyright 2018.1.5
	 */
	function detail()
	{
		LibRule::Check('OL01');
		$Params = MVC::$URL_PARAMS;
		$B2cOrder=new B2cOrder();
		$YpwAddr= new YpwAddr();

		if(empty($Params['orderId']) || !LibFc::Int($orderId=$Params['orderId']))
		{
			LibTpl::Error('订单信息错误');
			exit();
		}

		$res=$B2cOrder->get('or_order',['ord_id'],sprintf(' and ord_id=%d',$orderId),true);
		if(empty($res['data'])) LibTpl::Error('订单信息错误');

		//订单信息
		$orderRes=$B2cOrder->get('or_order',['*'],sprintf(' and ord_id=%d',$orderId),true);
		$proRes=$B2cOrder->getOrderPro('and orp_ord_id='.$orderId);
		$extIds = array_filter(array_column($proRes['data'], 'orp_ext_id'));		
		$orderRes['data']['proArr']=$proRes['data'];
		$shopInfo=$B2cOrder->get('sh_shop left join us_user_base on shop_uid=ub_uid',['*'],sprintf(' and shop_id=%d',$orderRes['data']['ord_shop_id']),true);
		$userInfo=$B2cOrder->get('us_user_base',['ub_username'],sprintf(' and ub_uid=%d',$orderRes['data']['ord_uid']),true);
		$orderRes['data']['shopUser']=$shopInfo['data']['ub_username'];
		$orderRes['data']['userName']=$userInfo['data']['ub_username'];
		$orderRes['data']['shopName']=$shopInfo['data']['shop_name'];

		// 物流信息
		if(!empty($extIds))
		{
			$res = $B2cOrder->getOrderExpressInfo($orderId);
			LibTpl::Set('expInfo',$res['data']);
		}

		// 地址信息
		$addrInfo=$YpwAddr->getAddrByIds($shopInfo['data']['shop_pct_ids']);
		LibTpl::Set('addrInfo',implode('', $addrInfo['data']));
		LibTpl::Set('shopInfo',$shopInfo['data']);
		LibTpl::Set('orderInfo',$orderRes['data']);

		// 订单日志
		$B2cOrder = new B2cOrder();
		$res = $B2cOrder->getOrderLog($orderId);
		LibTpl::Set('sysLog',$res['data']['sysLog']);
		LibTpl::Set('refundLog',$res['data']['refundLog']);

		// 订单状态枚举
		$orderStatusDes = array(
			'completed' => '交易完成',
			'creat' => '等待付款',
			'paied' => '等待发货',
			'send' => '等待收货',
			'cancel' => '订单已取消',
			'refund' => '退款中',
		);
		LibTpl::Set('orderStatusDes',$orderStatusDes);


		// 退款信息枚举 0 卖家  1买家  2系统
		$userType = array(
			0 => '卖家',
			1 => '买家',
			2 => '系统',
		);
		LibTpl::Set('userType',$userType);

		// 星期枚举
		$weekarray=array("日","一","二","三","四","五","六");
		LibTpl::Set('weekarray',$weekarray);

		// meta
		LibTpl::Set('title','订单详情-跑街的');
		LibTpl::Put();
	}

	
	/**
	 * @method    后台管理员查看交易快照
	 * @author 	  xu
	 * @copyright 2018-04-27
	 */
	public function snapshoot()
	{
		// 参数
		$Params = mvc::$URL_PARAMS;
		if(empty($Params['orpId']) || !LibFc::Int($orpId = $Params['orpId']))
			LibTpl::Error('快照不存在！');

		// 校验订单
		$B2cProduct=new B2cProduct();
		$B2cBase = new B2cBase();
		$where = sprintf(' and orp_id=%d',$orpId);
		$res = $B2cBase->get('or_order_product left join or_order on ord_id=orp_ord_id',['orp_prh_id','orp_pro_id','ord_shop_id','ord_id'],$where,true);
		if(empty($res['data']['orp_prh_id']) || empty($res['data']['orp_pro_id'])) LibTpl::Error('快照不存在！');
		LibTpl::Set('ids', $res['data']);


		// 获取快照
		$res = $B2cProduct->get('bc_product_history',['prh_text'],sprintf(' and prh_id=%d',$res['data']['orp_prh_id']),true);
		if(empty($res['data'])) LibTpl::Error('快照不存在！');

		// 渲染
		$data = json_decode($res['data']['prh_text'],true);
		LibTpl::Set('data',$data);
		
		LibTpl::Put();
		exit();
	}


	/**
	 * @method 获取交易快照的配件信息
	 * @author xu
	 * @copyright 2017-12-25
	 */
	public function getOrderInfo()
	{
		$Params=mvc::$URL_PARAMS;
		$res=['status'=>false,'data'=>'订单信息错误'];
		if((int)$Params['orderId']&&(int)$Params['shopId']&&(int)$Params['proId'])
		{
			$B2cBase=new B2cBase();
			$res=$B2cBase->get('or_order left join or_order_product on ord_id=orp_ord_id',['orp_count','ord_freight_money'],sprintf(' and ord_id=%d and ord_shop_id=%d and orp_pro_id=%d',$Params['orderId'],$Params['shopId'],$Params['proId']),true);
		}
		LibFc::ajaxJsonEncode($res);
	}


}