<?php
class pjlOrderAction extends baseAction
{

	// 全部列
	private $columnArr=[
		'pupId' => '采购单',
		'popId' => '报价单',
		'ordStatus' => '状态',
		'toShop'=>'通知',
		'shop'=>'店铺',
		'orderPrice'=>'金额',
		'orderDes'=>'配件详情',
        'num' => '数量',
		'user'=>'买家信息',
		'remark'=>'买家留言',
	];
	// 宽度控制
	private $columnArrWidth=[
	    'orderDes' => 150,
		'ordStatus'=> 90,
		'proPrice'=>60,
		'back'=>100,
		'user'=>120,
		'remark'=> 100,
		'orderPrice'=> 70,
		'shop'=> 150,
		'orderId'=>50,
		'status'=>60,
		'mainName'=>100,
		'mainNameTel'=>100,
		'shopTel'=>100,
        'popId' => 40,
        'pupId' => 40,
        'toShop' => 60,
        'num'=> 40,
	];

	// JavaScript对象构建
	private $data=[
		['name'=>'采购单','id'=>'pupId'],
		['name'=>'报价单','id'=>'popId'],
		['name'=>'订单状态','id'=>'ordStatus'],
		['name'=>'通知','id'=>'toShop'],
		['name'=>'数量','id'=>'num'],
		['name'=>'店铺','id'=>'shop'],
		['name'=>'买家信息','id'=>'user'],
		['name'=>'买家留言','id'=>'remark'],
		['name'=>'金额','id'=>'orderPrice'],
	];
	private $paramsArr=[
		'id'=>'showColumn',
		'type'=>'checkbox',
		'show_name'=>'name',
		'width'=>80,
		'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('JO01');
		LibTpl::Set('title','订单列表-跑街令');
		LibTpl::Put();
	}

	/**
	 * @订单列表
	 * @author 卢
	 * @copyright 2018.1.5
	 */
	function orderList()
	{
		LibRule::Check('JO01');
		$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);

		$_SESSION['pjlShowColumns'] = array_keys($columnArr);
		LibTpl::Set('columnShow',$_SESSION['pjlShowColumns']);

		// 显示宽度控制
		$columnArrWidth = $this->columnArrWidth;
		LibTpl::Set('columnArrWidth',$columnArrWidth);

		// table宽度
		$width = 0;
		foreach ($_SESSION['pjlShowColumns'] as $key => $value) {
			$width+=$columnArrWidth[$value];
		}
		LibTpl::Set('width',($width+420).'px');
		//售后订单
		$where='';
		$norStatus = " and ord_id not in (select rep_ord_id from pl_refund_pact where rep_status is not null and rep_status !='close' and rep_status!='refunded')";
		//状态
		switch ($Params['status']) {
			case 'creat':
				$where.=" and ord_status='creat'".$norStatus;
				break;
			case 'paied':
				$where.=" and ord_status='paied'".$norStatus;
				break;
			case 'send':
				$where.=" and ord_status='send'".$norStatus;
				break;
			case 'cancel':
				$where.=" and ord_status='cancel'".$norStatus;
				break;
			case 'refund':
				$where.= " and ord_id in (select rep_ord_id from pl_refund_pact where rep_status is not null and rep_status !='close' and rep_status!='refunded')";
				break;
			case 'completed':
				$where.=" and ord_status='completed'".$norStatus;
				break;
		}
		//订单号
		if(isset($Params['orderId'])&&(int)$Params['orderId'])
		{
			$where.=sprintf(' and ord_id=%d',(int)$Params['orderId']);
		}

		// 选中
		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['pupId'])&&(int)$Params['pupId'] > 0)
		{
			$where.= sprintf(" and ord_pur_id=%s", (int)$Params['pupId']);
		}
		//报价单id
		if(isset($Params['popId'])&&(int)$Params['popId'] > 0)
		{
			$where.= sprintf(" and ord_po_id=%s", (int)$Params['popId']);
		}
		//用户名
		if(isset($Params['userName'])&&!empty($Params['userName']))
		{
			//调用接口
			$LibYpApi = new LibYpApi();
			$post = [
				'filed'=>['u_id','u_name'],
				'where'=>sprintf(" and u_name like '%%%s%%' ",LibFc::Escape($Params['userName'])),
				'oneRow'=>false
			];
			$uidArr = $LibYpApi->Get('user/getUser',[], $post);
			if(!empty($uidArr['data'])){
			    $uidArr = implode(',',array_column($uidArr['data'],'u_id'));
                $where .= sprintf(' and ord_pu_uid in (%s)',$uidArr);
            }else{
                $where .= sprintf(" and ord_id < 0");
            }
		}

		if(!empty($Params['shopName']))
		{
			$where.=sprintf(" and ord_shop_id in (select shop_id from pl_shop where shop_name like '%%%s%%')", LibFc::Escape($Params['shopName']));
		}

		//时间段
		$where.=(int)strtotime($Params['addTime'])?sprintf(' and ord_atime >=%d',(int)strtotime($Params['addTime'])):'';
		$where.=(int)strtotime($Params['endTime'])?sprintf(' and ord_atime <=%d',(int)strtotime($Params['endTime'])):'';
		//排序
		$order=[];
		switch ($Params['orderBy'])
		{
			case 'tasc':
				array_push($order, 'ord_atime asc');
				break;
			case 'tdesc':
				array_push($order, 'ord_atime desc');
				break;
			case 'mdesc':
				array_push($order, 'ord_money desc');
				break;
			case 'masc':
				array_push($order, 'ord_money asc');
				break;
			default:
				array_push($order, 'ord_atime desc');
				break;
		}

		$order = implode(',',$order);

		$LibYpApi = new LibYpApi();
		$total = $LibYpApi->Get('pjl/getOrderCount',['where'=>$where]);
		$total = $total['data']['count'];
		if ($total > 0)
		{
			$orderData = $LibYpApi->Get('pjl/getOrderList',['page'=>$page,'perPage'=>$perPage,'order'=>$order,'where'=>$where]);
		//	var_dump($orderData);exit;
			$orderIds = array_column($orderData['data'],'ord_id');
			$refundArr = (new PjlBase)->get('pl_refund_pact',['rep_status','rep_ord_id'],sprintf(" and rep_ord_id in(%s)",implode(',',$orderIds)));
			if($refundArr['data']){
			    $refundArr = array_column($refundArr['data'],'rep_status','rep_ord_id');
            }else{
			    $refundArr = [];
            }

			//添加订单取消有退款
			$tempCount = count($refundArr);
			foreach ($orderData['data'] as &$value)
            {
                if($tempCount > 0 && isset($refundArr[$value['ord_id']]) && $refundArr[$value['ord_id']] != 'close'){
                    $value['is_refund'] = 1;
                }else{
                    $value['is_refund'] = 0;
                }
            }
			LibTpl::Set('orderList',$orderData['data']);
		}
		$Page = LibPage::Show($total, $perPage);
		LibTpl::Set('Page', $Page);
		LibTpl::Set('title','订单列表-跑街令');
		LibTpl::Put();
	}



	/**
	 * @订单搜索表单
	 * @author xu
	 * @copyright 2018.1.5
	 */
	function orderSearch()
	{
		LibRule::Check('JO01');
		
		//店铺
		// $LibYpApi = new LibYpApi();
		// $shopData = $LibYpApi->Get('pjl/getShopByWhere');
		$PjlBase = new PjlBase();
		$shopData = $PjlBase->get('pl_shop', ['*']);
		LibTpl::Set('shopArr',$shopData['data']);
		
		$data = $this->data;
		$paramsArr = $this->paramsArr;
		if(isset($_SESSION['pjlShowColumns']))
		{
			foreach ($data as $k=> $v)
			{
				if(in_array($v['id'], $_SESSION['pjlShowColumns']))
				{
					$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(!empty($_POST))
		{
			$orderId=trim($_POST['ChkIds'],',');
			$notCheck=trim($_POST['NotChkIds'],',');
			if(isset($_SESSION['pjlChkOrderIds']))
			{
				$_SESSION['pjlChkOrderIds']=array_unique(array_merge(explode(',', $orderId),$_SESSION['pjlChkOrderIds']));
				foreach ($_SESSION['pjlChkOrderIds'] as $k => $v)
				{
					if(in_array($v, explode(',', $notCheck)))
					{
						unset($_SESSION['pjlChkOrderIds'][$k]);
					}
				}
			}
			else
			{
				$_SESSION['pjlChkOrderIds']=explode(',', $orderId);
			}
			$data = array('status'=>true,'data'=>array('check'=>array_filter($_SESSION['pjlChkOrderIds'])));
			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['pjlChkOrderIds']))
		{
			foreach ($_SESSION['pjlChkOrderIds'] as $k => $v)
			{
				if(in_array($v, $orderId))
				{
					unset($_SESSION['pjlChkOrderIds'][$k]);
				}
			}
		}
		LibFc::ajaxJsonEncode(array('status'=>true,'data'=>true));
	}

	/**
	 * @发送短信告知当前订单状态
	 * @author 卢
	 * @copyright 2018.1.5
	 */
	function sendOrdStatBySms()
	{
		// LibRule::Check('OL02');//权限校验
		if(!empty($_POST['checkOrderId']))
		{
			$dataArr = array_filter($_POST['checkOrderId'],'LibFc::Int');
			if(!empty($dataArr))
			{
				$LibYpApi = new LibYpApi();
				$LibYpApi->Get('pjl/sendOrdStatBySms',['ordId'=>$_POST['checkOrderId'],'to'=>$_POST['to']]);
				LibFc::ajaxJsonEncode(array('status'=>true,'data'=>true));
			}
		}
		LibFc::ajaxJsonEncode(['status'=>false,'data'=>'参数不正确,ID 不正确']);
	}


	/**
	 * @author 卢
	 * @copyright 2018.1.5
	 */
	function cancelOrder()
	{
		// LibRule::Check('OL02');
		if(!empty($_POST['checkOrderId']))
		{
			$idArr = array_filter($_POST['checkOrderId'],'LibFc::Int');
			$PjlOrder = new PjlOrder();
			$PjlOrder->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('JO02');
		$Params = MVC::$URL_PARAMS;
		$LibYpApi = new LibYpApi();
		if(empty($Params['orderId']) || !LibFc::Int($orderId=$Params['orderId']))
		{
			LibTpl::Error('订单信息错误');
			exit();
		}

		$PjlBase = new PjlBase();
		$res = $PjlBase->get('pl_order', ['count(*) count'], sprintf(' and ord_id=%d',$orderId),true);

		if($res['data']['count'] > 0)
		{
			$res = $LibYpApi->Get('pjl/getOrderByWhere',['where'=>sprintf(' and ord_id=%d',$orderId),'oneRow'=>true]);
			//订单信息
			$proRes = $LibYpApi->Get('pjl/getOrderProductByWhere',['where'=>sprintf(' and odp_ord_id=%d',$orderId)]);
			$res['data']['proArr'] = $proRes['data'];

			//订单图片
			if(!empty($res['data']['ord_pur_imgs']))
				$res['data']['ord_pur_imgs'] = array_filter(explode(',', $res['data']['ord_pur_imgs']));

			//获取店铺信息
			$shop = $LibYpApi->Get('pjl/getShopByWhere', ['where'=>sprintf('and shop_id=%d',$res['data']['ord_shop_id']),'oneRow'=>true,'field'=>['shop_name','shop_tel']]);

			//获取用户信息
			$LibYpApi = new LibYpApi();
			$post = [
				'filed'=>['u_id','u_name','u_nickname','u_real_name'],
				'where'=>sprintf(" and u_id = %d ", $res['data']['ord_pu_uid']),
				'oneRow'=>true
			];
			$user = $LibYpApi->Get('user/getUser',[], $post);

			//基本信息
			LibTpl::Set('orderInfo',array_merge($res['data'],$shop['data'],$user['data'],json_decode($res['data']['ord_addr'],true),json_decode($res['data']['ord_model_info'],true)));

			// 发货物流信息
			$logic = $LibYpApi->Get('pjl/getLogisDetail',['where'=>'and ord_id='.$orderId,'type'=>'order','ext_from' => 'index']);
			
			$ordsendInfo = json_decode($res['data']['ord_send_info'],true);
			if(!empty($ordsendInfo) && $ordsendInfo['code'] == 'SELF' && empty($logic['data'])){
				
				$logic['data'] = $ordsendInfo;
			}
			
			LibTpl::Set('expInfo',$logic['data']);

			//售后历史
			$res = $LibYpApi->Get('pjl/refundHistory',['field'=>['rep_id','rel_txt','rel_atime','rel_utype','rel_by_uid','rel_by_uname','rep_express_des'],'where'=>sprintf(' and rep_ord_id=%d order by rel_atime desc',$orderId)]);

			if(!empty($res['data']))
			{
				foreach ($res['data'] as $k => $v)
				{
					$res['data'][$k]['formatTime']=date('Y-m-d H:i:s',$v['rel_atime']);
				}
			}
			LibTpl::Set('refundLog',$res['data']);

			// 订单日志
			// $res = $PjlOrder->getOrderLog($orderId);
			// LibTpl::Set('sysLog',$res['data']['sysLog']);

			//支付详情
			$res = $LibYpApi->Get('pjl/getOrderPayInfoByIds',['ids'=>[$orderId],'oneRow'=>true]);
			if (!empty($res['data']))
			{
				$res['data']['orp_atime'] = date('Y-m-d H:i:s',$res['data']['orp_atime']);
				if (!empty($res['data']['orp_pay_time']))
					$res['data']['orp_pay_time'] = date('Y-m-d H:i:s',$res['data']['orp_pay_time']);
				if (!empty($res['data']['orp_close_time']))
					$res['data']['orp_close_time'] = date('Y-m-d H:i:s',$res['data']['orp_close_time']);
				if (!empty($res['data']['orp_check']))
				{
					$res['data']['orp_check'] = json_decode($res['data']['orp_check'],true);
					$res['data']['orp_check']['time'] = date('Y-m-d H:i:s',$res['data']['orp_check']['time']);
				}
			}
			// wait(待处理)  close(已关闭)  paied(已成功)
			$payStatus = [
				'wait' => '待处理',
				'close' => '已关闭',
				'paied' => '已成功'
			];
			$payCode = [
				'weixin' => '微信',
				'alipay' => '支付宝',
			];
			$payType = [
				'pc' => '扫码',
				'app' => 'APP',
				'wap' => '手机网',
				'gzh' => '公众号',
			];
			LibTpl::Set('payType',$payType);
			LibTpl::Set('payCode',$payCode);
			LibTpl::Set('payStatus',$payStatus);
			LibTpl::Set('payInfo',$res['data']);

			// 订单状态枚举
			$orderStatusDes = array(
				'completed' => '交易完成',
				'creat' => '等待付款',
				'paied' => '等待发货',
				'send' => '等待收货',
				'cancel' => '订单已取消',
				'refund' => '退款中',
			);
			LibTpl::Set('orderStatusDes',$orderStatusDes);

			// 退款信息枚举 0 卖家  1买家  2系统
			$userType = array(
				0 => '卖家',
				1 => '买家',
				2 => '系统',
			);

			LibTpl::Set('userType',$userType);
			// 退款信息枚举 0 卖家  1买家  2系统
			$logicType = $LibYpApi->Get('pjl/getExpressStatus');
			LibTpl::Set('logicType',$logicType['data']);

			// 星期枚举
			$weekarray=array("日","一","二","三","四","五","六");
			LibTpl::Set('weekarray',$weekarray);
		}
		LibTpl::Set('title','订单详情-跑街令');
		LibTpl::Put();
	}

	public function refundLogic()
	{
		$Params = MVC::$URL_PARAMS;
		$id = (int) $Params['id'];
		$error = true;
		if($Params['from']=='refund' && $id > 0)
		{
			$LibYpApi = new LibYpApi();
			$res = $LibYpApi->Get('pjl/getRefundLogic',['id'=>$id]);
			LibTpl::Set('logicType',$res['data']['logicType']);
			LibTpl::Set('baseInfo',$res['data']['baseInfo']);
			LibTpl::Set('expInfo',$res['data']['expInfo']);
		}else
		{
			$error = false;
		}
		LibTpl::Set('error',$error);
		LibTpl::Set('title','退/换货物流-跑街令');
		LibTpl::Put();
	}
}
