<?php
class userAction
{
	//只能调用/static/目录下的 js | css | 控件[webuploader、datetimepicker、ueditor]
	private $HEAD_CSSJS = ['css'=>['css/buyers.css', 'css/account.css' ], 'js'=>['js/account.js'], 'plugin'=>[]];

	function __construct()
	{
		LibTpl::Set('HEAD_CSSJS', $this->HEAD_CSSJS);
		if(isset($_SESSION['_userid']))
		{
			$B2cBase=new B2cBase();
			$res=$B2cBase->get('us_user_base',['ub_level'],sprintf(' and ub_uid=%d',$_SESSION['_userid']),true);
			LibTpl::Set('company', $res['data']['ub_level']);
		}
		//是否有接口
		$MainBase = new MainBase();
		$res = $MainBase->get('api_user', ['count(*) as count'], sprintf(" and au_uid=%d and au_etime>=%d",$_SESSION['_shopid'],time()), true);
		$tjTotal = $res['data']['count'];
		LibTpl::Set('tjTotal',$tjTotal);
	}

	function index()
	{
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin();

		$Params = mvc::$URL_PARAMS;
		$B2cOrder = new B2cOrder();
		$B2cBase=new B2cBase();
		$YpwUser = new YpwUser();

		//用户信息
		$FieldArr = array('u_nickname','u_real_name','u_logo','ui_sex','ui_work','ui_company','ui_qq');
		$res = $YpwUser->getUser($FieldArr, ' and u_id='.$_SESSION['_userid'], true);
		LibTpl::Set('infoArr',$res['data']);
		
		//计算每个状态数量
		//待付款
		$statusCount=$B2cOrder->get('or_order',['count(ord_id) count'],sprintf(" and ord_user_delete=0 and ord_seller_delete=0 and ord_uid=%d and ord_status='creat'",$_SESSION['_userid']),true);
		$sCount['creat']=$statusCount['data']['count'];
		//代发货
		$statusCount=$B2cOrder->get('or_order left join or_order_product on orp_ord_id=ord_id',['distinct ord_id'],sprintf(" and orp_refund_status is null and ord_user_delete=0 and ord_seller_delete=0  and ord_uid=%d and ord_status='paied' group by ord_id",$_SESSION['_userid']));
		$sCount['paied']=count($statusCount['data']);
		//待收货
		$statusCount=$B2cOrder->get('or_order',['count(ord_id) count'],sprintf(" and ord_user_delete=0 and ord_seller_delete=0  and ord_uid=%d and ord_status='send'",$_SESSION['_userid']),true);
		$sCount['send']=$statusCount['data']['count'];
		//待评价

		// $statusCount=$B2cOrder->get('or_order',['distinct ord_id']," and ord_status='completed' and ord_user_delete=0 and ord_seller_delete=0 and (ord_evaluate=0 or ord_id in(select orp_ord_id from or_order_product where orp_status='completed' and orp_evaluate=0)) and ord_uid=".$_SESSION['_userid'],true);

		$statusCount=$B2cOrder->get('or_order',['count(*) count']," and ord_status='completed' and ord_user_delete=0 and ord_user_delete=0 and (ord_evaluate=0 or ord_id in (select orp_ord_id from or_order_product where orp_status='completed' and orp_evaluate=0)) and ord_uid=".$_SESSION['_userid'],true);

		$sCount['wait']=$statusCount['data']['count'];
		//已完成
		$statusCount=$B2cOrder->get('or_order left join or_order_product on orp_ord_id=ord_id',['distinct ord_id'],sprintf(" and orp_refund_status is null and ord_user_delete=0 and ord_seller_delete=0  and ord_uid=%d and ord_status='completed' group by ord_id",$_SESSION['_userid']));
		$sCount['completed']=count($statusCount['data']);
		//获取退款数量
		$reOrder=$B2cBase->get('or_order left join or_order_product on ord_id=orp_ord_id',['distinct orp_ord_id'],sprintf(" and orp_refund_status in('wait','refundpro','confirm','refuse') and ord_uid=%d and ord_user_delete=0 and ord_seller_delete=0",$_SESSION['_userid']));
		$sCount['refund']=count($reOrder['data']);
		LibTpl::Set('sCount',$sCount);
		//列出前5个(非取消、删除)状态的订单
		$where=sprintf(" and ord_uid=%d and ord_user_delete=0 and ord_seller_delete=0 and ord_status!='cancel'",$_SESSION['_userid']);
		$orderBy='ord_add_time desc';
		$orderListData=$B2cOrder->getOrderList(1,5,$orderBy,$where);
		LibTpl::Set('orderList', $orderListData['data']);
		//获取商城公告
		$where = " and arc_cat_id=867 and art_status='pass' order by art_seq asc,timeseq desc limit 8";
		$data = $B2cOrder->get('cm_article left join cm_article_category on art_id=arc_art_id',['art_id,art_title,arc_cat_id,(case when art_last_time>art_add_time then art_last_time else art_add_time end) timeseq'], $where);
		LibTpl::Set('annouList', $data['data']);
		//猜你喜欢
		$B2cHistory = new B2cHistory();
		$where = isset($_SESSION['_shopid'])?sprintf(' and pro_shop_id !=%d and pro_status>0 and pro_count>0 and shop_status=1',$_SESSION['_shopid']):'and pro_status>0 and pro_count>0 and shop_status=1';
		$lovelyArr = $B2cHistory->getGuessLovely($_SESSION['_userid'],$perPage=8,$nowPage=1,$where,[],true);
		// print_r($lovelyArr);
		LibTpl::Set('loveList', $lovelyArr['data']);
		//页面head
		$headArr = [
			'title'=>'我的商城-跑街的',	
			'keyword'=>'',	
			'des'=>''
		];
		LibTpl::Set('headArr', $headArr);
		LibTpl::Put();
	}

	/**
	  * @method 会员注册
	  * @author soul 2017/5/10
	  */
	function register()
	{
		//用户未登录才可以操作
		$OthCheck = new OthCheck();
		$OthCheck->notLogin();
		
		$Error = '';
		if(!empty($_POST['regname']) && !empty($_POST['mobile']) && !empty($_POST['imgcode']))
		{
			if(empty($_POST['tkey']) || $_SESSION['tkey'] != $_POST['tkey']) LibTpl::Error('请求异常，获取数据失败！');
			unset($_SESSION['tkey']);
			//验证码校验
			if($_SESSION['imgcode'] != strtoupper($_POST['imgcode']))
			{
				$Error = '验证码错误，请重新输入';
			}
			else if(trim($_POST['password']) != trim($_POST['password2']))
			{
				$Error = '两次输入密码不一致，请重新输入';
			}
			else
			{
				$LibYpApi = new LibYpApi();
				$UserDataArr = [
					'u_name'=>$_POST['regname'],
					'u_password'=>$_POST['password'],
					'mobile_code'=>$_POST['mobile_code'],
					'u_mobile'=>$_POST['mobile'],
					'u_from'=>'PJD'
				];
				$ResArr = $LibYpApi->Get('user/register', [], ['data'=>$UserDataArr, 'lang'=>'cn']);
				$Uid = (int) $ResArr['data'];
			
				LibTpl::Set('UserDataArr', $UserDataArr);
				$headArr = [
					'title'=>'成功注册会员-跑街的',	
					'keyword'=>'',	
					'des'=>''
				];
				unset($_SESSION['imgcode']);
				LibTpl::Set('headArr', $headArr);
				LibTpl::Put('user/registerOk.php');
				exit;
			}
		}
		LibTpl::Set('POST', $_POST);
		LibTpl::Set('Error', $Error);
		$headArr = [
			'title'=>'用户注册-跑街的',	
			'keyword'=>'',	
			'des'=>''
		];
		LibTpl::Set('headArr', $headArr);
		LibTpl::Put();
	}
	
	/**
	  * @method 发送邮件验证功能
	  * @author soul 2017/5/10
	  */
	private function sendChkemail($UserName, $Email)
	{
		$Item = base64_encode($UserName.'@'.md5('yp'.$Email.'2014'));
		$ChkUrl = mvc::$cfg['HOST']['b2c'].'user/chkemailOk?item='.$Item;
		
		LibTpl::Set('UserName', $UserName);
		LibTpl::Set('ChkUrl', $ChkUrl);
		$Content = LibTpl::Fetch('user/sendChkemail.php');
		$PostArr = ['ema_type'=>'紧急', 'ema_from'=>'B2C', 'ema_to_email'=>$Email, 'ema_title'=>$UserName.'邮箱验证-【跑街的】', 'ema_text'=>$Content];
		$LibYpApi = new LibYpApi();
		$ResArr = $LibYpApi->Get('email/send', [], $PostArr);
		return $ResArr;
	}


	/**
	  * @method 申请邮件验证
	  * @author soul 2017/5/10
	  */
	function chkemail()
	{
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin();

		$LibYpApi = new LibYpApi();
		$Res = $LibYpApi->Get('user/getUserById', ['uid'=>$_SESSION['_userid']]);
		$UserData = $Res['data'];
		if($UserData['u_emil_check'] == 1) LibFc::Go(mvc::$cfg['HOST']['b2c'].'user/safety');
		LibTpl::Set('UserData', $UserData);

		$Params = mvc::$URL_PARAMS;
		$SendOk = null;
		if(!empty($_POST['imgcode'])&&!empty($_POST['email']))
		{
			if($_SESSION['imgcode'] != strtoupper($_POST['imgcode']))
			{
				$ErrorCode = 'checkcode_error';
			}
			else
			{
				if(empty($UserData))
				{
					$ErrorCode = 'not_reg';
				}
				else if($UserData['u_emil_check'] == 1)
				{
					$ErrorCode = 'has_chk';
				}
				else
				{
					//校验邮箱唯一性
					$dataArr = [
						'filed'=>['count(*) as count'],
						'where'=>sprintf(" and u_id !=%d and u_email = '%s' and u_emil_check=1", $_SESSION['_userid'], LibFc::Escape($_POST['email'])),
						'oneRow'=>true
					];
					$Res = $LibYpApi->Get('user/getUser', [], $dataArr);
					if(!empty($Res['data']['count']))
					{
						$ErrorCode = 'not_unique';
					}
					else
					{
						unset($_SESSION['imgcode']);
						$LibYpApi->Get('user/setUser', [], ['uid'=>$_SESSION['_userid'], 'data'=>['u_email'=>$_POST['email']]]);
						$this->sendChkemail($UserData['u_name'], $_POST['email']);
						$SendOk = true;
					}
				}
				LibTpl::Set('newEmail',$_POST['email']);
			}
		}
		LibTpl::Set('SendOk', $SendOk);
		LibTpl::Set('ErrorCode', $ErrorCode);
		LibTpl::Set('UserName', $UserName);
		LibTpl::Set('UserData', $UserData);
		$headArr = [
			'title'=>'邮箱验证-跑街的',	
			'keyword'=>'',	
			'des'=>''
		];
		LibTpl::Set('headArr', $headArr);
		LibTpl::Put();
	}


	/**
	  * @method 邮件验证
	  * @author soul 2017/5/10
	  */
	function chkemailOk()
	{
		$Params = mvc::$URL_PARAMS;
		$CheckOk = null;
		$ItemArr = explode('@', base64_decode(trim($Params['item'])));
		if(count($ItemArr) == 2 && !empty($ItemArr[0]) && !empty($ItemArr[1]))
		{
			$UserName = $ItemArr[0];
			
			$LibYpApi = new LibYpApi();
			$dataArr = [
				'filed'=>['u_id', 'u_email', 'u_emil_check'],
				'where'=>sprintf(" and u_name='%s'", LibFc::Escape($ItemArr[0])),
				'oneRow'=>true
			];
			$Res = $LibYpApi->Get('user/getUser', [], $dataArr);
			if(empty($Res['data']))
			{
				$ErrorCode = 'not_reg';
			}
			else if($ItemArr[1] == md5('yp'.$Res['data']['u_email'].'2014'))
			{
				$UserData = $Res['data']; 
				LibTpl::Set('UserData', $UserData);
				if($UserData['u_emil_check'] != 1)
				{
					$LibYpApi->Get('user/setUser', [], ['uid'=>$UserData['u_id'], 'data'=>['u_emil_check'=>1]]);
				}
				$CheckOk = true;
			}
			else
			{
				$CheckOk = false;
				$ErrorCode = 'failed';
			}
			$UserName = $ItemArr[0];
		}
		LibTpl::Set('userid', $_SESSION['_userid']);
		LibTpl::Set('CheckOk', $CheckOk);
		LibTpl::Set('ErrorCode', $ErrorCode);
		LibTpl::Set('UserName', $UserName);

		$headArr = [
			'title'=>'邮箱验证-跑街的',	
			'keyword'=>'',	
			'des'=>''
		];
		LibTpl::Set('headArr', $headArr);
		LibTpl::Put();
	}



	/**
	  * @method 申请重置密码
	  * @author soul 2017/5/10
	  */
	function getpass()
	{
		$OthCheck = new OthCheck();
		$OthCheck->notLogin();

		$Params = mvc::$URL_PARAMS;
		if(!empty($_POST['by']) && isset($_POST['imgcode']))
		{
			if($_SESSION['imgcode'] != strtoupper($_POST['imgcode']))
			{
				$ErrorCode = 'checkcode_error';
			}
			else 
			{
				$LibYpApi = new LibYpApi();
				if($_POST['by'] == 'email')
				{
					$dataArr = [
						'filed'=>['u_name', 'u_email', 'u_password','u_emil_check'],
						'where'=>sprintf(" and u_name='%s' or u_email = '%s'", LibFc::Escape($_POST['username']), LibFc::Escape($_POST['username'])),
						'oneRow'=>true
					];
					$Res = $LibYpApi->Get('user/getUser', [], $dataArr);
					$UserData = $Res['data'];
					if(empty($UserData))
					{
						$ErrorCode = 'not_reg';
					}
					else
					{
						if($UserData['u_emil_check']<1||empty($UserData['u_email']))
						{
							$ErrorCode = 'not_check';
						}
						else
						{
							//发送重置邮件
							$Item = base64_encode($UserData['u_name'].'@'.md5($UserData['u_password']));
							$ChkUrl = 'http://'.$_SERVER['HTTP_HOST'].'/user/setpass?item='.$Item;
							LibTpl::Set('UserData', $UserData);
							LibTpl::Set('ChkUrl', $ChkUrl);
							$Content = LibTpl::Fetch('user/sendPassEmail.php');
							$PostArr = ['ema_type'=>'紧急', 'ema_from'=>'B2C', 'ema_to_email'=>$UserData['u_email'], 'ema_title'=>$UserData['u_name'].'密码重置-【跑街的】', 'ema_text'=>$Content];
							
							$LibYpApi->Get('email/send', [], $PostArr);
							unset($_SESSION['imgcode']);
							$SendOk = true;
						}
					}
				}
				else if($_POST['by'] == 'mobile')
				{
					$B2cBase = new B2cBase();
					//校验验证码
					$dataArr = [
						'mobile'=>$_POST['mobile'],	
						'style'=>'password',
						'from'=>'PJD',
						'code'=>$_POST['mobile_code'],
					];
					$Res = $LibYpApi->Get('sms/checkMobileCode', $dataArr, [], true);
					if(!$Res['status'])
					{
						$ErrorCode = 'mobile_code_error';
					}
					else
					{
						//验证码正确 校验用户是否存在
						$dataArr = [
							'filed'=>['u_name', 'u_password'],
							'where'=>sprintf(" and u_mobile='%s' and u_mobile_check = 'Y'", LibFc::Escape($_POST['mobile']) ),
							'oneRow'=>true
						];
						$Res = $LibYpApi->Get('user/getUser', [], $dataArr);
						$UserData = $Res['data'];
						if(empty($UserData))
						{
							$ErrorCode = 'not_reg';
						}
						else
						{
							//跳转
							$Item = base64_encode($UserData['u_name'].'@'.md5($UserData['u_password']));
							//使短信验证码失效
							$dataArr = [
								'mobile'=>$_POST['mobile'],	
								'style'=>'password',
								'from'=>'PJD',
							];
							$LibYpApi->Get('sms/outMobileCode', $dataArr, [], true);
							LibFc::Go(mvc::$cfg['HOST']['b2c'].'user/setpass?item='.$Item);
						}
					}
				}
			}
		}
		LibTpl::Set('SendOk', $SendOk);
		LibTpl::Set('ErrorCode', $ErrorCode);
		//LibTpl::Set('POST', $_POST);
		$headArr = [
			'title'=>'找回密码-跑街的',
			'keyword'=>'',	
			'des'=>''
		];
		LibTpl::Set('ComTitle', '找回密码');
		LibTpl::Set('headArr', $headArr);
		LibTpl::Put();
	}


	/**
	  * @method 重置密码
	  * @author soul 2017/5/10
	  */
	function setpass()
	{
		$OthCheck = new OthCheck();
		$OthCheck->notLogin();

		$Params = mvc::$URL_PARAMS;
		if(!empty($_POST['username']) && !empty($_POST['oldpass']) && !empty($_POST['password']) && !empty($_POST['password2']))
		{
			$LibYpApi = new LibYpApi();
			$dataArr = [
				'filed'=>['u_id', 'u_password'],
				'where'=>sprintf(" and u_name='%s'", LibFc::Escape($_POST['username'])),
				'oneRow'=>true
			];
			$Res = $LibYpApi->Get('user/getUser', [], $dataArr);
			$UserData = $Res['data'];
			if(!empty($UserData) && $_POST['oldpass'] == md5($UserData['u_password']))
			{
				$Password = trim($_POST['password']);
				$Password2 = trim($_POST['password2']);
				if(strlen($Password) < 6 || strlen($Password) > 20)
				{
					$Error = '密码是长度为6~20个字符的组合';
				}
				else if($Password == $Password2)
				{
					$LibYpApi->Get('user/setUser', [], ['uid'=>$UserData['u_id'], 'data'=>['u_password'=>$Password]]);
					LibTpl::Set('SetOK', true);
				}
				else
				{
					$Error = '两次输入的密码不一致，请重新输入';
				}
				LibTpl::Set('Error', $Error);
			}
		}
		else if(!empty($Params['item']))
		{
			$ItemArr = explode('@', base64_decode(trim($Params['item'])));
			if(count($ItemArr) == 2 && !empty($ItemArr[0]) && !empty($ItemArr[1]))
			{
				$LibYpApi = new LibYpApi();
				$dataArr = [
					'filed'=>['u_id', 'u_name', 'u_password'],
					'where'=>sprintf(" and u_name='%s'", LibFc::Escape($ItemArr[0])),
					'oneRow'=>true
				];
				$Res = $LibYpApi->Get('user/getUser', [], $dataArr);
				$UserData = $Res['data'];
				if(!empty($UserData) && $ItemArr[1] == md5($UserData['u_password']))
				{
					LibTpl::Set('UserData', $UserData);
					LibTpl::Set('ItemArr', $ItemArr);
					LibTpl::Set('Item', $Params['item']);
					LibTpl::Set('ItemOk', true);
				}
			}
		}
		$headArr = [
			'title'=>'重置密码-跑街的',
			'keyword'=>'',	
			'des'=>''
		];
		LibTpl::Set('headArr', $headArr);
		LibTpl::Set('ComTitle', '重置密码');
		LibTpl::Put();
	}


	/**
	  * @method 会员登录后重置密码
	  * @author soul 2017/5/10
	  */
	function resetpass()
	{
		//必须登录才可以进行
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin();

		$YpwBase = new YpwBase();
		if(!empty($_POST['oldpassword']) && !empty($_POST['password']) && !empty($_POST['password2']))
		{
			$oldpassword = trim($_POST['oldpassword']);
			$password = trim($_POST['password']);
			$password2 = trim($_POST['password2']);
			if($password !== $password2)
			{
				$Error = '两次输入的新密码不一致';
			}
			else
			{
				$Res = $YpwBase->get('yp_user', ['u_password'], sprintf(" and u_id=%d", $_SESSION['_userid']), true);
				if($Res['data']['u_password'] != md5('Y'.md5($oldpassword).'P'))
				{
					$Error = '请输入正确的旧密码';
				}
				else
				{
					$YpwBase->set('yp_user', ['u_password'=>md5('Y'.md5($password).'P')], sprintf(" and u_id=%d", $_SESSION['_userid']), true);
					LibTpl::Set('SetOK', true);
				}
			}
		}
		LibTpl::Set('Error', $Error);
		LibTpl::Set('LeftMenu', 'safety');
		$headArr = [
			'title'=>'重置密码-跑街的',
			'keyword'=>'',	
			'des'=>''
		];
		LibTpl::Set('headArr', $headArr);
		LibTpl::Put();
	}

	/**
	  * @method 手机绑定
	  * @author soul 2017/5/10
	  */
	function bindMobile()
	{
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin();

		if($_SESSION['_mobliechk'] == 'Y') LibFc::Go(mvc::$cfg['HOST']['b2c'].'user/safety');

		$LibYpApi = new LibYpApi();
		$Res = $LibYpApi->Get('user/getUserById', ['uid'=>$_SESSION['_userid']]);
		LibTpl::Set('UserData', $Res['data']);
		
		if(!empty($_POST['mobile']) && !empty($_POST['mobile_code']) && isset($_POST['imgcode']))
		{
			if($_SESSION['imgcode'] != strtoupper($_POST['imgcode']))
			{
				$Error = '图片验证码不正确';
			}
			else
			{
				$Mobile = trim($_POST['mobile']);
				$dataArr = [
					'mobile'=>$_POST['mobile'],	
					'style'=>'bind',
					'from'=>'PJD',
					'code'=>$_POST['mobile_code'],
				];
				$LibYpApi->Get('sms/checkMobileCode', $dataArr);

				$PostArr = [
					'uid'=>$_SESSION['_userid'],
					'data'=>['shouji'=>['bind'=>'Y', 'u_mobile'=>$Mobile]],
					'lang'=>'cn'
				];
				$LibYpApi->Get('user/bind_account', [], $PostArr);
				
				//使短信验证码失效
				$dataArr = [
					'mobile'=>$_POST['mobile'],	
					'style'=>'bind',
					'from'=>'PJD',
				];
				$LibYpApi->Get('sms/outMobileCode', $dataArr, [], true);
				$_SESSION['_mobliechk'] = 'Y';
				LibTpl::Set('SetOK', true);
				unset($_SESSION['imgcode']);
			}
		}
		LibTpl::Set('Error', $Error);
		LibTpl::Set('LeftMenu', 'safety');
		$headArr = [
			'title'=>'手机绑定-跑街的',
			'keyword'=>'',	
			'des'=>''
		];
		LibTpl::Set('headArr', $headArr);
		LibTpl::Put();
	}


	/**
	  * @method 手机解绑
	  * @author soul 2017/5/10
	  */
	function unbindMobile()
	{
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin();


		if($_SESSION['_mobliechk'] == 'N') LibFc::Go(mvc::$cfg['HOST']['b2c'].'user/safety');

		$LibYpApi = new LibYpApi();
		$Res = $LibYpApi->Get('user/getUserById', ['uid'=>$_SESSION['_userid']]);
		LibTpl::Set('UserData', $Res['data']);
		
		if(!empty($_POST['mobile']) && !empty($_POST['mobile_code']) && isset($_POST['imgcode']))
		{
			if($_SESSION['imgcode'] != strtoupper($_POST['imgcode']))
			{
				$Error = '图片验证码不正确';
			}
			else
			{
				$Mobile = trim($_POST['mobile']);
				$dataArr = [
					'mobile'=>$_POST['mobile'],	
					'style'=>'unbind',
					'from'=>'PJD',
					'code'=>$_POST['mobile_code'],
				];
				$LibYpApi->Get('sms/checkMobileCode', $dataArr);

				$PostArr = [
					'uid'=>$_SESSION['_userid'],
					'data'=>['shouji'=>['bind'=>'N', 'u_mobile'=>$Mobile]],
					'lang'=>'cn'
				];
				$LibYpApi->Get('user/bind_account', [], $PostArr);
				
				//使短信验证码失效
				$dataArr = [
					'mobile'=>$_POST['mobile'],	
					'style'=>'unbind',
					'from'=>'PJD',
				];
				$LibYpApi->Get('sms/outMobileCode', $dataArr, [], true);
				$_SESSION['_mobliechk'] = 'N';
				LibTpl::Set('SetOK', true);
				unset($_SESSION['imgcode']);
			}
		}
		LibTpl::Set('Error', $Error);
		LibTpl::Set('LeftMenu', 'safety');
		$headArr = [
			'title'=>'手机绑定-跑街的',
			'keyword'=>'',	
			'des'=>''
		];
		LibTpl::Set('headArr', $headArr);
		LibTpl::Put();
	}



	/**
	  * @method 账号安全
	  * @author soul 2017/5/10
	  */
	function safety()
	{
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin();

		$Params = mvc::$URL_PARAMS;
		
		$LibYpApi = new LibYpApi();
		if(!empty($Params['unbind']))
		{
			switch ($Params['unbind']) {
				case 'weixin':
					$PostArr = [
						'uid'=>$_SESSION['_userid'],
						'data'=>['weixin'=>['bind'=>'N', 'u_weixin_unionid'=>'', 'u_weixin_info'=>'']],
						'lang'=>'cn'
					];
					$LibYpApi->Get('user/bind_account', [], $PostArr);
					break;
				
				case 'email':
					$PostArr = [
						'uid'=>$_SESSION['_userid'],
						'data'=>['u_emil_check'=>0],
					];
					$LibYpApi->Get('user/setUser', [], $PostArr);
					break;
				case 'qq':
					$PostArr = [
						'uid'=>$_SESSION['_userid'],
						'data'=>['qq'=>['bind'=>'N', 'u_qq_unionid'=>'', 'u_qq_info'=>'']],
						'lang'=>'cn'
					];
					$LibYpApi->Get('user/bind_account', [], $PostArr);
					break;
			}
			LibFc::Go(mvc::$cfg['HOST']['b2c'].'user/safety');
		}
		else if(!empty($Params['bind']) && $Params['bind'] == 'weixin' && !empty($Params['udata']))
		{
			$WXUserArr = json_decode(base64_decode($Params['udata']), true);
			if(!empty($WXUserArr['unionid']))
			{
				$PostArr = [
					'uid'=>$_SESSION['_userid'],
					'data'=>['weixin'=>['bind'=>'Y', 'u_weixin_unionid'=>$WXUserArr['unionid'], 'u_weixin_info'=>json_encode($WXUserArr)]],
					'lang'=>'cn'
				];
				
				$LibYpApi->Get('user/bind_account', [], $PostArr);
			}
			LibFc::Go(mvc::$cfg['HOST']['b2c'].'user/safety');
		}
		else if(!empty($Params['bind']) && $Params['bind'] == 'qq' && !empty($Params['udata']))
		{
			$qqUserArr = json_decode(base64_decode($Params['udata']), true);
			if(!empty($qqUserArr['unionid']))
			{
				$PostArr = [
					'uid'=>$_SESSION['_userid'],
					'data'=>['qq'=>['bind'=>'Y', 'u_qq_unionid'=>$qqUserArr['unionid'], 'u_qq_info'=>json_encode($qqUserArr)]],
					'lang'=>'cn'
				];
				
				$LibYpApi->Get('user/bind_account', [], $PostArr);
			}
			LibFc::Go(mvc::$cfg['HOST']['b2c'].'user/safety');
		}
	
		$res = $LibYpApi->get('wx/getWxUserUrl', ['app'=>'gzh_app', 'backUrl'=>mvc::$cfg['HOST']['b2c'].'user/safety?bind=weixin', 'scope'=>'snsapi_login']);
		LibTpl::Set('wxloginurl', $res['data']);
		$res = $LibYpApi->get('qq/getQQUserUrl', ['app'=>'web_yp', 'backUrl'=>mvc::$cfg['HOST']['b2c'].'user/safety?bind=qq', 'scope'=>'']);
		LibTpl::Set('qqloginurl', $res['data']);
		$YpwUser = new YpwUser();
		$Res = $YpwUser->getUser(['*'], sprintf(" and u_id=%d", $_SESSION['_userid']), true);
		$UserData = $Res['data'];
		if($UserData['u_weixin_info'] != '') $UserData['u_weixin_info'] = json_decode($UserData['u_weixin_info'], true);
		if($UserData['u_qq_info'] != '') $UserData['u_qq_info'] = json_decode($UserData['u_qq_info'], true);
		LibTpl::Set('UserData', $UserData);

		LibTpl::Set('LeftMenu', 'safety');
		$headArr = [
			'title'=>'账号安全-跑街的',
			'keyword'=>'',	
			'des'=>''
		];
		LibTpl::Set('headArr', $headArr);
		LibTpl::Put();
	}

	
	/**
	  * @method 用户数据唯一性，用户名、邮箱、昵称、手机号码....
	  * @remark 当用户已登录并且$_POST['uid'] == -1 自动取 $_SESSION['_userid']
	  * @author soul 2017/5/10
	  */
	function checkUnique()
	{
		$Val = trim($_POST['val']);
		$Uid = isset($_SESSION['_userid']) && $_POST['uid'] == -1 ? $_SESSION['_userid'] : (int) $_POST['uid'];
		$Where = '';
		$Return = ['status'=>true, 'data'=>[], 'code'=>''];
		switch($_POST['filed'])
		{
			case 'regname': 
				$Where = sprintf(" and u_name='%s'", LibFc::Escape($Val));
			break;
			case 'regemail': 
				$Where = sprintf(" and u_email='%s'", LibFc::Escape($Val));
			break;
			case 'regmobile': 
				$Where = sprintf(" and u_mobile_check='Y' and u_mobile='%s'", LibFc::Escape($Val));
			break;
			case 'nickname': 
				$Where = sprintf(" and u_id !=%d and u_nickname='%s'", $Uid, LibFc::Escape($Val));
			break;
		}
		if($Where != '')
		{
			$LibYpApi = new LibYpApi();
			$dataArr = [
				'filed'=>['count(*) as count'],	
				'where'=>$Where,
				'oneRow'=>true
			];
			$Return = $LibYpApi->Get('user/getUser', [], $dataArr);
		}
		LibFc::ajaxJsonEncode($Return);
	}


	function nameCheckcode()
	{
		$Params = mvc::$URL_PARAMS;
		$must = 0;
		if(!empty($Params['name']))
		{
			$LibYpApi = new LibYpApi();
			$ResArr = $LibYpApi->Get('user/nameCheckcode', ['name'=>$Params['name']]);
			$must = $ResArr['data'];
		}
		$Return = ['status'=>true, 'data'=>$must];
		LibFc::ajaxJsonEncode($Return);
	}

	/**
	  * @method 会员登录
	  * @author soul 2017/5/10
	  */
	function login()
	{
		$OthCheck = new OthCheck();
		$OthCheck->notLogin();

		$Params = mvc::$URL_PARAMS;
		LibTpl::Set('goto', $Params['goto']);

		$headArr = [
			'title'=>'欢迎登录-跑街的',	
			'keyword'=>'',	
			'des'=>''
		];
		if(isset($_COOKIE['utag']))
		{
			$utagArr = explode('@', base64_decode($_COOKIE['utag']));
			LibTpl::Set('utagArr', $utagArr);
		}
		LibTpl::Set('name', $Params['name']);
		LibTpl::Set('headArr', $headArr);
		$this->HEAD_CSSJS['css'][] = 'css/login.css';
		LibTpl::Set('HEAD_CSSJS', $this->HEAD_CSSJS);
		LibTpl::Put();
	}

	/**
	  * @method 会员异步登录
	  * @author soul 2017/5/10
	  */
	function ajaxLogin()
	{
		// if(empty($_POST['tkey']) || $_SESSION['tkey'] != $_POST['tkey']) 
		// 	LibFc::ajaxJsonEncode(['status'=>false,'data'=>'请求异常，获取数据失败！']);
		unset($_SESSION['tkey']);
		if(empty($_POST['captoken'])){
			$ResArr = ['status'=>false, 'data'=>'验证码错误，请重新输入', 'code'=>'checkcode_error'];
			LibFc::ajaxJsonEncode($ResArr);	
		}
		//验证码校验
		$OthCheckcode = new OthCheckcode();
		$res = $OthCheckcode->checkDingxiangCaptcha($_POST['captoken'], mvc::$cfg['dignxiangTop']);
		$captokenOk = $res['data'];
		if(!$captokenOk){
			$ResArr = ['status'=>false, 'data'=>'验证码错误，请重新输入', 'code'=>'checkcode_error'];
		}else{
			$PostData = [
				'type'=>'password',
				'data'=>['name'=>$_POST['loginname'],'password'=>$_POST['password'], 'auto'=>$_POST['auto']],
				'lang'=>'cn'
			];
			$PostData['data']['ip'] = LibFc::GetClientIp();
			$PostData['data']['from'] = 'PJD';
			$LibYpApi = new LibYpApi();
			$ResArr = $LibYpApi->Get('user/login', [], $PostData, true);
			if($ResArr['status'] && !empty($ResArr['data']['u_id']))
			{
				unset($_SESSION['imgcode']);
				$this->loginSession($ResArr);
				//登录成功
				$ResArr['data'] = [
					'u_id'=>$_SESSION['_userid'],
					'u_name'=>$_SESSION['_username'],
					'u_mobliechk'=>$_SESSION['_mobliechk'],
				];
			}
		}
		LibFc::ajaxJsonEncode($ResArr);	
	}


	//通过用户ID获取TOKEN
	function getToken()
	{
		$Params = MVC::$URL_PARAMS;
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin();
		$LibYpApi = new LibYpApi();
		$res = $LibYpApi->Get('user/getToken', ['uid'=>md5('yp'.$_SESSION['_userid']), 'uname'=>$_SESSION['_username']]);
		$arr = $res['data'];
		$arr['to'] = '';
		if(!empty($Params['t']) && $Params['t'] > 0)
		{
			$YpwBase = new YpwBase();
			$tres = $YpwBase->get('yp_user', ['u_name'], sprintf(" and u_id = %d", $Params['t']), true);
			if(!empty($tres['data'])) $arr['to'] = $tres['data']['u_name'];
		}
		LibFc::ajaxJsonEncode(['status'=>true,'data'=>$arr]);
	}


	//获取微信登录URL
	function getWxloginUrl()
	{
		$LibYpApi = new LibYpApi();
		$res = $LibYpApi->get('wx/getWxUserUrl', ['app'=>'gzh_app', 'backUrl'=>mvc::$cfg['HOST']['b2c'].'user/loginAny?by=weixin', 'scope'=>'snsapi_login']);
		LibFc::ajaxJsonEncode($res);
	}


	/*
	*微信登录
	*/
	function bindWeixin()
	{
		$OthCheck = new OthCheck();
		$OthCheck->notLogin();
		
		$error = '';
		if(!empty($_POST['unionid']) && !empty($_POST['info']))
		{
			if(empty($_POST['imgcode']) || $_SESSION['imgcode'] != strtoupper($_POST['imgcode']))
			{
				$error = '验证码错误，请重新输入';
			}
			else if(empty($_POST['loginname']) || empty($_POST['password']))
			{
				$error = '请重新输入用户名、密码';
			}
			else
			{
				$LibYpApi = new LibYpApi();
				$PostData = [
					'type'=>'password',
					'data'=>['name'=>$_POST['loginname'],'password'=>$_POST['password']],
					'lang'=>'cn'
				];
				$PostData['data']['ip'] = LibFc::GetClientIp();
				$PostData['data']['from'] = 'PJD';
				$LibYpApi = new LibYpApi();
				$ResArr = $LibYpApi->Get('user/login', [], $PostData, true);
				if($ResArr['status'] && !empty($ResArr['data']['u_id']))
				{
					unset($_SESSION['imgcode']);
					$this->loginSession($ResArr);
					$PostArr = [
						'uid'=>$_SESSION['_userid'],
						'data'=>['weixin'=>['bind'=>'Y', 'u_weixin_unionid'=>$_POST['unionid'], 'u_weixin_info'=>base64_decode($_POST['info'])]],
						'lang'=>'cn'
					];
					$LibYpApi->Get('user/bind_account', [], $PostArr);
					LibFc::Go(mvc::$cfg['HOST']['b2c'].'user/safety');
				}
				else
				{
					$error = $ResArr['data'];
				}
			}
		}
		$Params = mvc::$URL_PARAMS;
		if(!empty($Params['udata']))
		{
			$WXUserArr = json_decode(base64_decode($Params['udata']), true);
		}
		if(empty($WXUserArr['unionid']))
		{
			LibFc::Go(mvc::$cfg['HOST']['b2c'].'user/login');
		}
		$headArr = [
			'title'=>'微信绑定-跑街的',	
			'keyword'=>'',	
			'des'=>''
		];
		LibTpl::Set('WXUserArr', $WXUserArr);
		LibTpl::Set('error', $error);
		LibTpl::Set('headArr', $headArr);
		$this->HEAD_CSSJS['css'][] = 'css/login.css';
		LibTpl::Set('HEAD_CSSJS', $this->HEAD_CSSJS);
		LibTpl::Put();
	}


	/**
	  * @method 微信、token登录
	  * @author soul 2017/5/10
	  */
	function loginAny()
	{
		$Params = mvc::$URL_PARAMS;
		$By = empty($Params['by']) ? '': $Params['by'];
		switch($By)
		{
			case 'weixin':
				if(!empty($Params['udata']))
				{
					$WXUserArr = json_decode(base64_decode($Params['udata']), true);
					if(!empty($WXUserArr['unionid']))
					{
						$PostData = [
							'type'=>'weixin',
							'data'=>['unionid'=>$WXUserArr['unionid'],'openid'=>$WXUserArr['openid']],
							'lang'=>'cn'
						];
					}
				}
			break;
			case 'token':
				if(!empty($Params['token']))
				{
					$PostData = [
						'type'=>'token',
						'data'=>['token'=>$Params['token']],
						'lang'=>'cn'
					];
				}
			break;
		}
		if(!empty($PostData))
		{
			$PostData['data']['ip'] = LibFc::GetClientIp();
			$PostData['data']['from'] = 'PJD';
			$LibYpApi = new LibYpApi();
			$ResArr = $LibYpApi->Get('user/login', [], $PostData, true);
			if($ResArr['status'] && !empty($ResArr['data']['u_id']))
			{
				unset($_SESSION['imgcode']);
				$this->loginSession($ResArr);
				//登录成功
				$ResArr['data'] = [
					'u_id'=>$_SESSION['_userid'],
					'u_name'=>$_SESSION['_username'],
					'u_mobliechk'=>$_SESSION['_mobliechk'],
				];
				$toUrl = !empty($Params['goto']) ? urldecode($Params['goto']): mvc::$cfg['HOST']['b2c'];
				LibFc::Go($toUrl);
			}
			else if(!empty($WXUserArr['unionid']))
			{
				//微信登录，去绑定账号
				LibFc::Go(mvc::$cfg['HOST']['b2c'].'user/bindWeixin?udata='.$Params['udata']);
			}
		}
		LibFc::Go(mvc::$cfg['HOST']['b2c'].'user/login?goto='.$Params['goto']);
	}

	/**
	  * @method 登录标识
	  * @author soul 2017/5/10
	  */
	private function loginSession($ResArr)
	{
		$Params = mvc::$URL_PARAMS;
		if(!empty($ResArr['data']['u_id']))
		{
			$this->logoutSession();
			$_SESSION['_userid'] = $ResArr['data']['u_id'];
			$_SESSION['_username'] = $ResArr['data']['u_name'];
			$_SESSION['_uname'] = empty($ResArr['data']['u_real_name'])? $_SESSION['_username']: $ResArr['data']['u_real_name'];
			$_SESSION['_mobliechk'] = $ResArr['data']['u_mobile_check'];
			
			$B2cBase = new B2cBase();

			//VIN 查询次数 普通会员10次/天  店主、企业会员100次/天
			$res = $B2cBase->get('us_user_base', ['ub_level'], sprintf(" and ub_uid=%d", $_SESSION['_userid']), true);
			$_SESSION['_ulevel'] =  $res['data']['ub_level'];
			$_SESSION['_vinCount'] = $_SESSION['_ulevel'] == 1 ? 100:10;
			//判断用户是否开通店铺
			
			$Res = $B2cBase->get('sh_shop', ['shop_id'], sprintf(" and shop_uid=%d and shop_status = 1", $_SESSION['_userid']), true);
			if(!empty($Res['data']))
			{
				$_SESSION['_vinCount'] = 100;
				$_SESSION['_shopid'] = $Res['data']['shop_id'];
				$_SESSION['_shopowner'] = true;
			}
			else
			{
				//是否为店铺职员
				$Res = $B2cBase->get('sh_worker', ['wor_shop_id', 'wor_rule_ids'], sprintf(" and wor_uid=%d and wor_status=1 limit 1", $_SESSION['_userid']), true);
				if(!empty($Res['data']))
				{
					//无需判断是否绑定手机
					$_SESSION['_mobliechk'] = 'Y';
					$_SESSION['_shopid'] = $Res['data']['wor_shop_id'];
					$_SESSION['_shopowner'] = false;
					$_SESSION['_rules'] = explode(',', $Res['data']['wor_rule_ids']);
				}
			}
			$Expires = !empty($_POST['auto']) || !empty($Params['token']) || $Params['by'] == 'token' ? time()+3600*24*7: 0;
			setcookie('utag', $ResArr['data']['utag'], $Expires, "/", mvc::$cfg['COOKIE_DOMAIN']);
		}
	}
	
	/**
	  * @method 清楚登录标识
	  * @author soul 2017/5/10
	  */
	private function logoutSession()
	{
		unset($_SESSION['_userid']);
		unset($_SESSION['_username']);
		unset($_SESSION['_uname']);
		unset($_SESSION['_ulevel']);
		unset($_SESSION['_mobliechk']);
		unset($_SESSION['_vinCount']);
		unset($_SESSION['_shopid']);
		unset($_SESSION['_shopowner']);
		unset($_SESSION['_rules']);
		unset($_SESSION['WEIXIN']);
		setcookie('utag',null, -1, "/", mvc::$cfg['COOKIE_DOMAIN']);
	}

	/**
	  * @method 退出登录
	  * @author soul 2017/5/10
	  */
	function logout()
	{
		$this->logoutSession();
		LibFc::Go(mvc::$cfg['HOST']['b2c'].'user/login?goto='.urlencode($_SERVER["HTTP_REFERER"]));
	}

	/**
	  * @method 检测登录状态
	  * @author soul 2017/5/10
	  */
	function checkLogin()
	{
		$Arr = ['status'=>true, 'data'=>[]];
		if(!empty($_SESSION['_userid']))
		{
			$B2cNotice = new B2cNotice();
			//登陆时有效消息入库
			$B2cNotice->setNoticesInsert($_SESSION['_userid']);
			//获取有效消息总数
			$res = $B2cNotice->getNoticeNoReadCount($_SESSION['_userid'],true);
			$count = isset($res['data']['count'])?$res['data']['count']:0;
			$B2cBase =new B2cBase();
			// 获取购物车数量
			$B2cShoppingCart = new B2cShoppingCart();
			$res = $B2cShoppingCart->getCarGoodNum($_SESSION['_userid']);

			$Arr['data'] = [
				'uid'=>$_SESSION['_userid'],
				'carCount'=>$res['data'],
				'username'=>$_SESSION['_username'],
				'wxfastlogin'=>$_SESSION['wxfastlogin'],
				'msgCount'=>$count
			];
		}
		LibFc::ajaxJsonEncode($Arr);
	}


	/**
	  * @method 订单管理
	  * @author 卢 2017/8/10
	  */
	function order()
	{
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin();
		$Params = mvc::$URL_PARAMS;
		$B2cOrder = new B2cOrder();
		$B2cProduct=new B2cProduct();
		$B2cBase=new B2cBase();
		$headArr = array(
			'title'=>'订单管理-跑街的',	
			'keyword'=>'',	
			'des'=>''
		);
		$this->HEAD_CSSJS['plugin'][] = 'datetimepicker';
		LibTpl::Set('HEAD_CSSJS', $this->HEAD_CSSJS);
		LibTpl::Set('headArr', $headArr);
		LibTpl::Set('LeftMenu','order');
		//计算每个状态数量
		//待付款
		$statusCount=$B2cOrder->get('or_order',['count(ord_id) count'],sprintf(" and ord_user_delete=0 and ord_seller_delete=0  and ord_uid=%d and ord_status='creat'",$_SESSION['_userid']),true);
		$sCount['creat']=$statusCount['data']['count'];
		//代发货
		$statusCount=$B2cOrder->get('or_order left join or_order_product on orp_ord_id=ord_id',['ord_id'],sprintf(" and ord_user_delete=0 and ord_seller_delete=0  and ord_uid=%d and ord_status='paied' group by ord_id",$_SESSION['_userid']));
		$sCount['paied']=count($statusCount['data']);
		//待收货
		$statusCount=$B2cOrder->get('or_order',['count(ord_id) count'],sprintf(" and ord_user_delete=0 and ord_seller_delete=0  and ord_uid=%d and ord_status='send'",$_SESSION['_userid']),true);
		$sCount['send']=$statusCount['data']['count'];
		//待评价
		$statusCount=$B2cOrder->get('or_order',['count(*) count']," and ord_status='completed' and ord_user_delete=0 and (ord_evaluate=0 or ord_id in (select orp_ord_id from or_order_product where orp_status='completed' and orp_evaluate=0)) and ord_uid=".$_SESSION['_userid'],true);
		// print_r($statusCount);
		$sCount['evaluate']=$statusCount['data']['count'];
		//已完成
		$statusCount=$B2cOrder->get('or_order left join or_order_product on orp_ord_id=ord_id',['ord_id'],sprintf(" and ord_user_delete=0 and ord_seller_delete=0  and ord_uid=%d and ord_status='completed' group by ord_id",$_SESSION['_userid']));
		$sCount['completed']=count($statusCount['data']);
		// 获取取消的订单数量
		$reOrder=$B2cBase->getFieldUniVal('or_order left join or_order_product on ord_id=orp_ord_id','orp_ord_id',sprintf(" and ord_uid=%d and ord_user_delete=0 and ord_seller_delete=0 and ord_status = 'cancel' ",$_SESSION['_userid']));
		$sCount['cancel']=count($reOrder['data']);
		$reOrder=$B2cBase->getFieldUniVal('or_order left join or_order_product on ord_id=orp_ord_id','orp_ord_id',sprintf(" and orp_refund_status in ('wait','confirm','refuse','refundpro') and ord_uid=%d and ord_user_delete=0 and ord_seller_delete=0 and ord_status != 'cancel' ",$_SESSION['_userid']));
		$sCount['refund']=count($reOrder['data']);
		LibTpl::Set('sCount',$sCount);
		$perPage=10;
		$monthTime=3*30*24*60*60;
		LibTpl::Set('Params',$Params);
		$nowPage=isset($Params['page']) ? $Params['page'] : 1;
		$status=isset($Params['status'])? $Params['status'] : 'recent';
		$evaluate=isset($Params['evaluate']) ? $Params['evaluate'] : 'all';
		LibTpl::Set('status', $status);
		switch ($status) {			
			case 'creat':
				$statusWhere=" and ord_status='creat'";
				break;
			case 'paied':
				$statusWhere=" and ord_status='paied'";
				break;
			case 'evaluate':
				$statusWhere=" and ord_status='completed' and ord_user_delete=0 and (ord_evaluate=0 or ord_id in(select orp_ord_id from or_order_product where orp_status='completed' and orp_evaluate=0))";
				break;
			case 'send':
				$statusWhere=" and ord_status='send'";
				break;
			case 'cancel':
				$statusWhere=" and ord_status='cancel'";
				break;
			case 'refund':
				if(count($reOrder['data']))
				{
					// $statusWhere=sprintf(' and ord_id in(%s)',implode(',',$reOrder['data']));
					$statusWhere=sprintf(' and ord_id in(%s)',sprintf("select orp_ord_id from or_order left join or_order_product on ord_id=orp_ord_id where orp_refund_status in ('wait','confirm','refuse','refundpro') and ord_uid=%d and ord_user_delete=0 and ord_seller_delete=0 and ord_status != 'cancel' ",$_SESSION['_userid']));

				}else
				{
					$statusWhere=' and ord_id<-1';
				}
				break;			
			case 'completed':
				$statusWhere=" and ord_status='completed'";
				break;
			case 'before':
				$statusWhere=' and ord_add_time<'.(time()-$monthTime);
				break;
		}
		$complete='';
		switch ($evaluate) {
			case 'wait':

				$evaluateWhere=" and ord_status='completed' and ord_user_delete=0 and (ord_evaluate=0 or ord_id in(select orp_ord_id from or_order_product where orp_status='completed' and orp_evaluate=0))";

				break;
			case 'completed':
				$evaluateWhere=" and ord_evaluate >0 and orp_evaluate>0 and ord_status='completed' and orp_refund_status is null and ord_id not in (select orp_ord_id from or_order_product where orp_evaluate = 0)";
				break;		
			default:
				$evaluateWhere='';
				break;
		}
		//卖家名称
		$sWhere='';

		$sellerWhere=(isset($Params['sellerName'])&&!empty($Params['sellerName'])) ? sprintf(" and shop_name like'%%%s%%'",LibFc::Escape($Params['sellerName'])): '';

		if($sellerWhere)
		{
			$sellerInfo=$B2cOrder->get('sh_shop',['shop_id'],$sellerWhere);
			if(count($sellerInfo['data'])==0)
			{
				LibTpl::Set('orderList', []);
				LibTpl::Put();
				exit();
			}
			foreach ($sellerInfo['data'] as $k => $v) 
			{
				$shopId[]=$v['shop_id'];
			}
			$sWhere=sprintf(' and ord_shop_id in (%s)',implode(',', $shopId));
		}
		//时间
		$minTime=(isset($Params['completeMix'])&&LibFc::Int(strtotime($Params['completeMix']))) ? sprintf(" and ord_add_time >%d",strtotime($Params['completeMix'])): '';
		$maxTime=(isset($Params['completeMax'])&&LibFc::Int(strtotime($Params['completeMax']))) ? sprintf(" and ord_add_time <%d",strtotime($Params['completeMax'])): '';
		//关键字
		$orderSnWhere='';
		if(isset($Params['keyWord'])&&!empty($Params['keyWord']))
		{
			$Params['keyWord']=str_replace('，', ',', $Params['keyWord']);
			$keyWord=explode(',', $Params['keyWord']);
			foreach ($keyWord as $k => $v) 
			{
				if(is_numeric($v))
				{
					$orderIdArr[]=$v;
				}
				else
				{
					$orderNameArr[]=$v;
				}
			}
			$orderIdWhere='';
			$orderNameWhere='';
			//处理多订单号
			if(count($orderIdArr)>0)
			{

				$orderIdWhere=sprintf(' and ord_id in(%s)',implode(',',$orderIdArr));

			}
			//处理多订单名称
			if(count($orderNameArr)>0)
			{
				$keywordArr=$orderNameArr;
				$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']))
				{
					//搜索为空，返回
					$orderNameWhere=' and orp_pro_id<-1';
				}
				else
				{
					$keywordPro=array_unique(array_column($keywordProData['data'],'prk_pro_id'));
					$orderNameWhere=count($keywordPro)?sprintf(" and orp_pro_id in (%s)",implode(',',$keywordPro)):'';
				}
			}
			$orderSnWhere=$orderIdWhere.$orderNameWhere;
		}
		$baseWhere=sprintf(' and ord_uid=%d and ord_user_delete=0 and ord_seller_delete=0',$_SESSION['_userid']);
		$where=$baseWhere.$statusWhere.$proNameWhere.$minTime.$maxTime.$orderSnWhere.$sWhere.$evaluateWhere;
		// echo $where;
		$baseOrderBy='ord_add_time desc';
		$orderBy=$baseOrderBy;
		$orderListData=$B2cOrder->getOrderList($nowPage,$perPage,$orderBy,$where);
		// print_r($orderListData);
		LibTpl::Set('orderList', $orderListData['data']);
		$Page = LibPage::Show($orderListData['data'][0]['total'], $perPage);
		LibTpl::Set('Page', $Page);
		LibTpl::Put();
	}
	/**
	 * @method    ajax获取物流信息
	 * @author     廖
	 * @copyright 2017-08-28
	 * @return    ajaxJsonEncode  {'extName':xxx,data['time':xxx,...]..}
	 */
	function ajaxGetLogisticInfo()
	{
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin();
		$B2cExpress = new B2cExpress();
		if(LibFc::Int($_POST['orderId']))
		{
			$where = sprintf(" and orp_ord_id=%d and ord_uid=%d and orp_ext_id is not null",$_POST['orderId'],$_SESSION['_userid']);
			$re = $B2cExpress->Get('or_order left join or_order_product on ord_id=orp_ord_id',['orp_ext_id'],$where);
			if(!empty($re['data']))
			{
				$data = array_unique(array_column($re['data'], 'orp_ext_id'));
				$res = $B2cExpress->getLogisticInfo($data);
				unset($res['data']['same']);
			}
		}
		LibTpl::Set('orderId', $_POST['orderId']);
		LibTpl::Set('data', $res['data']);
		$result=LibTpl::Fetch('user/ajaxGetLogisticInfo.php');
		LibFc::ajaxJsonEncode(['status'=>true,'data'=>$result]);
	}
	/**
	 * @method    获取物流信息
	 * @author     廖
	 * @copyright 2017-08-28
	 * @return    ajaxJsonEncode  {'extName':xxx,data['time':xxx,...]..}
	 */
	function getLogisticInfo()
	{
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin();
		$Params = mvc::$URL_PARAMS;
		$headArr = array(
			'title'=>'查看物流-跑街的',	
			'keyword'=>'',	
			'des'=>''
		);
		LibTpl::Set('headArr', $headArr);
		$B2cExpress = new B2cExpress();
		if(LibFc::Int($Params['orderId']))
		{
			//获取所有的快递信息数据 //缓存读取
			$B2cProduct = new B2cProduct();
			$YpwAddr = new YpwAddr();
			$exp = $B2cExpress->getExpress();
			$where = sprintf(" and ord_id=%d and ord_uid=%d ",$Params['orderId'],$_SESSION['_userid']);
			$baseData = ['ord_id','ord_uid','ord_status','ord_shop_remark','ord_add_name','ord_add_tel','ord_add_mobile','ord_send_time','ord_shop_id','ord_add_pct','ord_add_address','shop_uid','shop_name','shop_domain'];
			$re = $B2cExpress->get('or_order left join sh_shop on ord_shop_id=shop_id',$baseData,$where,true);
			LibTpl::Set('order',$re['data']);
			if(!empty($re['data']))
			{
				if($re['data']['ord_status'] == 'completed' || $re['data']['ord_status'] == 'send' || $re['data']['ord_status'] == 'cancel')
				{
					$where = LibFc::Int($Params['orpId'])?' and orp_id='.$Params['orpId']:'';
					//获取该订单下的所有订单配件
					$res = $B2cExpress->get('or_order_product',['orp_id','orp_ord_id','orp_pro_id','orp_pro_name','orp_count','orp_ext_id'],sprintf("and orp_ord_id=%d and (orp_status='send' or orp_status='completed' or orp_status='cancel') %s",$Params['orderId'],$where));
					$ImgArr = array_unique(array_column($res['data'], 'orp_pro_id'));
					$extIdArr = array_unique(array_column($res['data'], 'orp_ext_id'));
					// //获取配件信息
					if(!empty($ImgArr)) $img = $B2cProduct->getProductPic($ImgArr,false);
					//获取快递信息
					if(!empty($extIdArr))
					{
						$expInfo = $B2cExpress->getLogisticInfo($extIdArr,true);
						$expInfo = $expInfo['data'];
					} 
					$expPro=[];
					if(!empty($res['data']))
					{
						foreach ($res['data'] as $key => $value) 
						{
							$expPro[$value['orp_ext_id']]['pro'][$value['orp_pro_id']] = array_merge($value,$img['data'][$value['orp_pro_id']][0]);
						}
					}
					//合併
					if(count($extIdArr)>0)
					{
						//合并数据
						foreach ($expPro as $key=>$value)
						{
							if(!empty($expInfo[$key]))
							{
								$expPro[$key] = array_merge($value,$expInfo[$key]);
							}
							//这个是重复的物流表单号
							if(!empty($expInfo['same']) && !empty($expInfo['same'][$key]))
							{
								foreach ($expInfo['same'][$key] as $k=> $v) 
								{
									if(!empty($expPro[$v]['pro']))
									{
										$expPro[$key]['pro'] = array_merge($expPro[$key]['pro'],$expPro[$v]['pro']);
									}
									unset($expPro[$v]);
								}
							}
						}
					}
					LibTpl::Set('expId',$extIdArr);
					LibTpl::Set('data',$expPro);
				}
				else
				{
					$logArr = ['creat'=>'订单还没有付款!','paied'=>'订单等待发货!'];
					LibTpl::Error($logArr[$re['data']['ord_status']],mvc::$cfg['HOST']['b2c'].'user/detail?orderId='.$re['data']['ord_id']);
					exit;
				}
			}
			else
			{
				LibTpl::Error('订单不存在!',mvc::$cfg['HOST']['b2c'].'user/order');
				exit;
			}
			LibTpl::Set('orderlog',true);
		}
		elseif(LibFc::Int($Params['repId']))
		{
			$res = $B2cExpress->get('or_refund_pact left join sh_shop on rep_shop_id=shop_id left join or_order_product on rep_orp_id=orp_id',['rep_uid','rep_ord_id','rep_orp_id','rep_refund_pro_time','rep_refund_addr','rep_express_des','shop_id','shop_uid','shop_name','shop_domain','orp_pro_id','orp_pro_name'],sprintf('and rep_id=%d and rep_uid=%d and rep_type>0',$Params['repId'],$_SESSION['_userid']),true);
			if(!empty($res['data']))
			{
				$res['data']['rep_refund_addr'] = json_decode($res['data']['rep_refund_addr'],true);
				$res['data']['rep_express_des'] = json_decode($res['data']['rep_express_des'],true);
				// print_r($res['data']);
				LibTpl::Set('data',$res['data']);
				//调用api获取物流信息
				if(!empty($res['data']['rep_express_des']['expcode']))
				{
					$LibYpApi = new LibYpApi();
					$dataArr = [
						'ext_exp_code'=>$res['data']['rep_express_des']['expcode'],
						'ext_number'=>$res['data']['rep_express_des']['number'],
						'ext_from'=>'B2C'
					];
					$resArr = $LibYpApi->Get('express/getTrack',$dataArr);
					$resArr['data']['ext_track'] = json_decode($resArr['data']['ext_track'],true);
					//获取缓存中的物流公司信息
					$exp = $B2cExpress->getExpress();
					$resArr['data'] = array_merge($resArr['data'],$exp['data'][$resArr['data']['ext_exp_code']]);
					LibTpl::Set('logic',$resArr['data']);
					//配件图片
					$B2cProduct = new B2cProduct;
					$picData = $B2cProduct->getProductPic([$res['data']['orp_pro_id']]);
					LibTpl::Set('pic',$picData['data'][$res['data']['orp_pro_id']][0]);
				}
			}
			LibTpl::Set('refunded',true);
		}
		else
		{
			LibTpl::Error('订单不存在!',mvc::$cfg['HOST']['b2c'].'user/order');
			exit;
		}
		$status = $B2cExpress->expressStatus();
		LibTpl::Set('status',$status);
		$week=array( 
		    "1"=>"周一", 
		    "2"=>"周二", 
		    "3"=>"周三", 
		    "4"=>"周四", 
		    "5"=>"周五", 
		    "6"=>"周六", 
		    "7"=>"周日"
		);
		LibTpl::Set('week',$week);
		$this->HEAD_CSSJS['css'][] = 'css/logistic.css';
		LibTpl::Set('HEAD_CSSJS', $this->HEAD_CSSJS);
		LibTpl::Put();
	}

	/**
	  * @method 积分明细
	  * @author soul 2017/5/10
	  */
	function integral()
	{
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin();


		$Params = mvc::$URL_PARAMS;
		$NowPage = isset($Params['page']) && $Params['page'] > 0 ? (int) $Params['page']:1;
		$PerPage = 20;

		$TimeArr = [
			'0'=>'--请选择时间--',
			'-1 month'=>'最近1个月积分明细',
			'-3 month'=>'最近3个月积分明细',
			'-6 month'=>'最近6个月积分明细',
			'--6 month'=>'6个月以前积分明细',
		];
		LibTpl::Set('TimeArr', $TimeArr);
		
		$Where = sprintf(" and inl_uid=%d", $_SESSION['_userid']);
		foreach($Params as $K=>$V)
		{
			if(trim($V) == '') continue;
			switch($K)
			{
				case 'type':
					$Where .= $V == 1 ? ' and inl_change >= 0': ' and inl_change <= 0';
				break;
				case 'time':
					if(!empty($V))
						$Where .= stripos($V, '--') !== false ? ' and inl_add_time<='.strtotime(str_replace('--', '-', $V)): ' and inl_add_time>='.strtotime($V);
				break;
			}
		}

		$B2cBase = new B2cBase();
		$Res = $B2cBase->get('us_integral_list', ['count(1) count'], $Where, true);
		$Total = $Res['data']['count'];
		if($Total > 0)
		{
			$Where .= sprintf(" order by inl_id limit %d,%d", ($NowPage-1)*$PerPage, $PerPage);
			$Res = $B2cBase->get('us_integral_list', ['inl_change, inl_has, inl_des, inl_add_time'], $Where);
			$ListArr = $Res['data'];
			LibTpl::Set('ListArr', $ListArr);
		}

		$B2cBase = new B2cBase();
		$Res = $B2cBase->get('us_user_base', ['ub_integral'], sprintf(" and ub_uid=%d", $_SESSION['_userid']), true);
		LibTpl::Set('UserBase', $Res['data']);

		$Page = LibPage::Show($Total, $PerPage);
		LibTpl::Set('Page', $Page);

		LibTpl::Set('Params', $Params);
		LibTpl::Set('LeftMenu', 'integral');
		$headArr = [
			'title'=>'积分明细-跑街的',
			'keyword'=>'',
			'des'=>''
		];
		LibTpl::Set('headArr', $headArr);
		LibTpl::Put();
	}
	/**
	  * @method 地址列表
	  * @author 卢 2017/6/7
	  */
	function address()
	{
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin();
		$headArr = [
			'title'=>'我的地址-跑街的',
			'keyword'=>'',
			'des'=>''
		];
		$B2cBase = new B2cBase();
		$B2cAddr = new B2cAddr();
		$Uid=$_SESSION['_userid'];		
		$Field=array('pc_id','pc_name','pc_pid');			
		$Mylist=$B2cAddr->GetMyListUser($Uid);
		$Params = mvc::$URL_PARAMS;
		$id = isset($Params['addid']) ? (int) $Params['addid']: null;
		if($id)
		{	
			$AddrDetail=$B2cBase->get('us_address',['*'],' and add_id='.$id.' and add_uid='.$Uid,true);
			LibTpl::Set('AddrDetail',$AddrDetail['data']);
		}
		LibTpl::Set('LeftMenu', 'address');
		LibTpl::set('Mylist',$Mylist['data']);
		LibTpl::Set('headArr', $headArr);
		LibTpl::Put();

	}
	/**
	 *@method ajax获取地址
	 * @author 卢 2017/6/7
	 */
	function ajaxGetAddr()
	{
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin();
		$Params = mvc::$URL_PARAMS;
		$Pid = isset($Params['pid']) ? (int) $Params['pid']: 0;
		$YpwBase = new YpwBase();
		$Res = $YpwBase->get('yp_province_city', ['pc_id as id', 'pc_name as name'], sprintf(" and pc_pid=%d", $Pid));
		LibFc::ajaxJsonEncode($Res);
	}

	/**
	 *@method 未登录ajax获取地址
	 * @author xu 2017/6/7
	 */
	function ajaxUnLoginGetAddr()
	{
		$Params = mvc::$URL_PARAMS;
		$Pid = isset($Params['pid']) ? (int) $Params['pid']: 0;
		$YpwBase = new YpwBase();
		$Res = $YpwBase->get('yp_province_city', ['pc_id as id', 'pc_name as name'], sprintf(" and pc_pid=%d", $Pid));
		LibFc::ajaxJsonEncode($Res);
	}
	
	/**
	  * @method 删除地址
	  * @author 卢 2017/6/7
	  */
	function addressDelete()
	{
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin();
		if(isset($_GET['addid'])&&LibFc::Int($_GET['addid']))
		{
			$aid=(int)$_GET['addid'];
			$Uid=$_SESSION['_userid'];
			$B2cBase = new B2cBase();
			$B2cBase->del('us_address',' and add_id='.$aid.' and add_uid='.$Uid);
			LibFc::Go(mvc::$cfg['HOST']['b2c'].'user/address');
			exit();
		}
		return false;
	}
	/**
	 *@method ajax修改默认地址
	 * @author 卢 2017/6/9
	 */
	function ajaxSetAddr()
	{
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin();
		if($_GET['id']&&LibFc::Int($_GET['id']))
		{
			$id=(int)$_GET['id'];
			$Uid=$_SESSION['_userid'];
			$B2cAddr=new B2cAddr();
			$re=$B2cAddr->setUserDefaultAddr($id,$Uid);
			LibFc::ajaxJsonEncode($re);			
		}
	}
	/**
	 *@method ajax添加地址
	 * @author 卢 2017/6/13
	 */
	function ajaxAddNewAddr()
	{
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin();
		$B2cBase = new B2cBase();
		$B2cAddr=new B2cAddr();
		$Uid=$_SESSION['_userid'];
		if(!empty($_POST['tag']))
		{	
			$PathArr=$_POST['province'];
			foreach($PathArr as $k => $v)
			{
				if($v=='0')
				{
					unset($PathArr[$k]);
				}
			}
			$Path=implode(',' , $PathArr);
			$Target=array(
				'add_uid'=>$Uid,
				'add_name'=>$_POST['name'],
				'add_pct_ids'=>$Path,
				'add_address'=>$_POST['detail_addr'],
				'add_tel'=>$_POST['phone'],
				'add_alias'=>$_POST['byname']
				);

			$Target['add_default']= $_POST['default']==1 ? 1:0;

			if($_POST['tag']=='add')
			{

				$re=$B2cAddr->checkUserUniqueAddr($Target);
				if(!$re['data'])
				{
					LibFc::ajaxJsonEncode($re);
					exit;
				}
				else
				{
					$res=$B2cBase->add('us_address',$Target);
					$Insertid = $res['data'];
				}
			}
			else if($_POST['tag']=='edit')
			{

				$addid=(int)$_POST['addid'];
				$sql=sprintf(' and add_id=%d and add_uid=%d',$addid,$Uid);
				$res=$B2cBase->set('us_address',$Target,$sql);
				$Insertid=$addid;
			}
			if($_POST['default']==1&&isset($Insertid))
			{
				$B2cAddr->setUserDefaultAddr($Insertid,$Uid);
			}
			LibFc::ajaxJsonEncode(array('status'=>true,'data'=>$Insertid));
			exit;		
		}
		else{
			LibFc::ajaxJsonEncode(array('status'=>false,'data'=>'false'));
		}
		
	}
	/**
	 * @method ajax获取某条收货地址弹窗内容
	 * @author 卢 2017/6/13
	 */
	function ajaxSetAddrHtml()
	{
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin();
		$B2cBase = new B2cBase();
		$Uid = $_SESSION['_userid'];
		$Params = mvc::$URL_PARAMS;
		$id = isset($Params['id']) ? (int) $Params['id']: null;
		if($id)
		{	
			$AddrDetail=$B2cBase->get('us_address',['*'],' and add_id='.$id.' and add_uid='.$Uid,true);
			LibTpl::Set('AddrDetail',$AddrDetail['data']);
		}
		LibTpl::Set('method',$Params['method']);
		$result=LibTpl::Fetch('user/ajaxSetAddrHtml.php');
		LibFc::ajaxJsonEncode(['status'=>true,'data'=>$result]);
		exit;
	}

	/**
	 * @method 用户个人信息表
	 * @param  表名 yp_user as u left join yp_user_ext as ui on u_id=ui_uid
	 * @author 廖
	 * @copyright 2017/6/30
	 */
	function info()
	{
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin();
		$YpwUser = new YpwUser();
		//提交表单到本身 验证是否存在$_POST['nickname'] 不能为空
		if(!empty($_POST['nickname']))
		{	
			if (!empty($_POST['qqnumber']) && !preg_match('/^\d{4,16}$/', trim($_POST['qqnumber'])))
			{
				$error = 'QQ号码格式不正确！';
				goto error;
			}
			$Where = sprintf(" and u_id !=%d and u_nickname='%s'", $_SESSION['_userid'],LibFc::Escape($_POST['nickname']));
			$re = $YpwUser->getUser(['count(*) as count'], $Where, true);
			//查询用户昵称是否唯一 =>js禁用
			if($re['status'] && $re['data']['count'] == 0)
			{
				$dataArr = [
					'u_nickname'=>$_POST['nickname'],
					'u_real_name'=>$_POST['realname'],
					'ui_sex'=>(int)$_POST['sex'],
					'ui_work'=>$_POST['work'],
					'ui_company'=>$_POST['company'],
					'ui_qq'=>$_POST['qqnumber'] ? trim($_POST['qqnumber']) : ''
				];

				$logoArr = json_decode($_POST['imgs'] ,true);
				$logo = $logoArr['sfile'];
				//$logo的值 如果不为空 说明是更改了的图片
				if(!empty($logo))
				{
					$logoInfo = $YpwUser->Get('yp_user', array('u_logo'), ' and u_id='.$_SESSION['_userid'], true);
					$dataArr['u_logo'] = $logo;
				}
				$re = $YpwUser->setUser($_SESSION['_userid'],$dataArr);

				if($re['status'])
				{
					//数据库存储成功之后 删除原来文件中心的旧图片
					if (!empty($logoInfo['data']['u_logo']))
					{
						$delLogoArr = ['cate'=>'yp_logo', 'files'=>$logoInfo['data']['u_logo']];
						$OthFileCenter = new OthFileCenter();
						$OthFileCenter->del($delLogoArr,'yp');
					}
				} else
				{
					$error = '更新信息失败';
				}
			}else
			{
				$error = '昵称已被使用';
			}	
		}
		error:
		$FieldArr = array('u_nickname','u_real_name','u_logo','ui_sex','ui_work','ui_company','ui_qq');
		$res = $YpwUser->getUser($FieldArr, ' and u_id='.$_SESSION['_userid'], true);
		LibTpl::Set('infoArr',$res['data']);
		LibTpl::Set('error',$error);
		LibTpl::Set('LeftMenu', 'info');
		$headArr = [
			'title'=>'个人信息-跑街的',
			'keyword'=>'',
			'des'=>''
		];
		$this->HEAD_CSSJS['plugin'][] = 'webuploader';
		LibTpl::Set('HEAD_CSSJS', $this->HEAD_CSSJS);
		LibTpl::Set('headArr', $headArr);
		LibTpl::Put();
	}

	/**
	 * @method 收藏的配件
	 * @author 廖
	 * @copyright 2017/7/6
	 */
	function collProduct()
	{	
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin();
		$Params = mvc::$URL_PARAMS;
		$B2cCollPro = new B2cCollPro();

		//收藏配件总条数
		$allCollRes = $B2cCollPro->get('us_product_collection',['count(*) as count'],'and prc_uid='.$_SESSION['_userid'], true);
		if($allCollRes['data']['count'] > 0)
		{
			$Params['order'] = isset($Params['order']) ? $Params['order'] : 'all';
			LibTpl::Set('Params', $Params);
			//限制条件
			$baseWhere = sprintf(' and prc_uid=%d',$_SESSION['_userid']);
			$order = '';
			//收藏配件失效的总条数
			$loseEffRes = $B2cCollPro->get('us_product_collection left join bc_product on prc_pro_id=pro_id left join sh_shop on pro_shop_id=shop_id',['count(*) as count'],sprintf('and ((pro_status <1 or pro_count<1 or shop_status<1) or (pro_id is null or shop_id is null)) %s',$baseWhere), true);
			switch ($Params['order']) 
			{
				case 'all':
					//分页总数
					$total = $allCollRes['data']['count'];
					LibTpl::Set('Total',$allCollRes['data']['count']);
					break;
				
				case 'loseEff':
					//分页总数
					$total = $loseEffRes['data']['count'];
					$order = " and ((pro_status <1 or pro_count<1 or shop_status<1) or (pro_id is null or shop_id is null)) ";
					LibTpl::Set('loseEff',$loseEffRes['data']['count']);
					break;
			}
			//关键字搜索
			$keyword = '';
			if(!empty($Params['keyword'])) 
			{
				$keyword = " and pro_name like '%".LibFc::Escape($Params['keyword'])."%'" ;
			}
			//合并限制条件
			$where = $baseWhere.$order.$keyword;
			
			$nowPage = isset($Params['page']) && $Params['page'] > 0 ? (int) $Params['page']:1;
			$perPage = 12;
			//关键字搜索结果总数
			if($keyword != '' && $total > 0)
			{
				$searchCount = $B2cCollPro->get('us_product_collection us left join bc_product bc on prc_pro_id=pro_id left join sh_shop on pro_shop_id=shop_id',['count(*) as count'],$where,true);
				$total = $searchCount['data']['count'];
			}
			//总数大于 0 查找数据
			if($total > 0)
			{
				$dataArr = $B2cCollPro->getUserCollProList($where,$nowPage,$perPage);
			}
			$total = LibFc::Int($total) ? $total : 0;
			$Page = LibPage::Show($total, $perPage);
			LibTpl::Set('Page',$Page);
			LibTpl::Set('collArr',$dataArr['data']);
		}
		$headArr = [
			'title'=>'收藏的商品-跑街的',	
			'keyword'=>'',	
			'des'=>''
		];
		LibTpl::Set('headArr', $headArr);
		LibTpl::Set('LeftMenu', 'collProduct');
		$this->HEAD_CSSJS['js'][] = 'js/collproduct.js';
		LibTpl::Set('HEAD_CSSJS', $this->HEAD_CSSJS);
		LibTpl::Put();
	}
	/**
	 * @method 删除收藏的商品
	 * @author 廖
	 * @copyright 2017/7/5
	 */
	function ajaxDelCollPro()
	{
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin();
		$proIdArr = array_filter(explode(',',trim($_POST['collProId'],',')),'LibFc::Int');
		if(!empty($proIdArr))
		{
			$B2cCollPro = new B2cCollPro();
			$re = $B2cCollPro->delUserCollPro($_SESSION['_userid'],$proIdArr);
			LibFc::ajaxJsonEncode(['status'=>true,'data'=>$proIdArr]);
		}else
		{
			LibFc::ajaxJsonEncode(['status'=>false,'data'=>'参数不正确']);
		}
	}
	/**
	 * @method 添加购物车
	 * @author 廖
	 * @copyright 2017/9/1
	 */
	function ajaxAddToCart()
	{
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin();
		if(LibFc::Int($_POST['proId']))
		{
			$B2cShoppingCart = new B2cShoppingCart();
			$re = $B2cShoppingCart->addCart($_POST['proId'],$_SESSION['_userid'],$num=1);
			LibFc::ajaxJsonEncode($re);
		}else
		{
			LibFc::ajaxJsonEncode(['status'=>false,'data'=>'参数不正确']);
		}
	}

   /**
	* @method 浏览历史
	* @author xu
	* @copyright 2017/7/4
	* @return  array('2017-07-04'=>array(1=>array(prh_uid=>1,prh_pro_id=>2,prh_ltime=>11499134234,prh_price,...),...),'2017-07-03'=>array())
	*/
	function proHistory()
	{	
		//验证当前用户
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin();
		$Params = mvc::$URL_PARAMS;
		$B2cBase = new B2cBase();

		// 前五大类
		$table = "us_product_history left join bc_product on pro_id=prh_pro_id left join sh_shop on shop_id=pro_shop_id ";
		$where = sprintf("and prh_uid=%d and shop_status=1 and shop_uid!=%d",$_SESSION['_userid'],$_SESSION['_userid']);
		$res = $B2cBase->get($table, ['count(*) num, pro_part_id'], $where.'  group by pro_part_id order by count(*) desc limit 5');
		$res = array_column($res['data'],null,'pro_part_id');
		$headPartIds = array_keys($res);
		LibTpl::Set('headPartIds',implode(',', $headPartIds));

		//第一页数据
		if(!empty($res))
		{
			$B2cPart  = new B2cPart();
			$AllPart = $B2cPart->getAllPart();
			$part = array();
			foreach ($AllPart['data'] as $k => $v)
			{ 
				if(in_array($v['part_id'],$headPartIds) && !empty($res[$v['part_id']]))
				{

					$part[] = array_merge($res[$v['part_id']] , $v );
				}
			}
			LibTpl::Set('part', $part);			
			$B2cHistory = new B2cHistory();
			$partId = (!empty($Params['partId']) && (!LibFc::Int($Params['partId']) || $Params['partId']!='other'))?$Params['partId']:0;
			LibTpl::Set('partId', $partId);
			$res = $B2cHistory->getProHistory($headPartIds,$PerPage=20,$NowPage=1,$_SESSION['_userid'],$partId);
			LibTpl::Set('historyArr', $res['data']);
		}
		
		// 其他
		if(!empty($headPartIds))
		{
			$where .= sprintf(" and pro_part_id not in (%s) ",implode(',', $headPartIds));
			$res = $B2cBase->get($table, ['count(*) count_other'], $where,true);
			LibTpl::Set('countOther',$res['data']['count_other']);
		}

		//页面head
		$headArr = [
			'title'=>'浏览历史-跑街的',	
			'keyword'=>'',
			'des'=>''
		];
		LibTpl::Set('weekArray',["日","一","二","三","四","五","六"]);
		LibTpl::Set('Params',$Params);
		LibTpl::Set('LeftMenu', 'proHistory');
		LibTpl::Set('headArr', $headArr);
		LibTpl::Put();
	}




/**
	* @method 浏览历史AJAX自动加载
	* @author xu
	* @copyright 2017/7/7
	* @return  成功:{'status':true,'data':historyAjaxLoad.php}，失败:{'status':false,'data':'error'}
	*/
	function prohistoryAjaxLoad()
	{	
		//验证当前用户
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin();
		$B2cHistory = new B2cHistory();
		$Params = mvc::$URL_PARAMS;

		$headPartIds =empty($_POST['headPartIds'])?[]:array_filter(explode(',',$_POST['headPartIds']),"LibFc::Int");
		$NowPage = LibFc::Int($_POST['page']);
		$partId = (!empty($_POST['partId']) && (!LibFc::Int($_POST['partId']) || $_POST['partId']!='other'))?$_POST['partId']:0;
		LibTpl::Set('partId', $partId);
		
		$res = $B2cHistory->getProHistory($headPartIds,$PerPage=20,$NowPage,$_SESSION['_userid'],$partId);
		LibTpl::Set('historyArr', $res['data']);
		LibTpl::Set('weekArray',["日","一","二","三","四","五","六"]);
		$data = empty($res['data'])?'':LibTpl::Fetch('user/historyAjaxLoad.php');

		LibFc::ajaxJsonEncode(['status'=>true,'data'=>$data]);
	}


/**
	* @method 删除浏览历史
	* @param  
	* @author xu
	* @copyright 2017/7/4
	* @return  成功：{'res':'success'} 失败：{'res':'false'} {'res':'Illegal operation!'}
	*/
	function delProHistory()
	{	
		//参数判断
		if(!LibFc::Int($_POST['prh_pro_id'])) LibFc::ajaxJsonEncode(['status'=>false,'data'=>'参数错误！']);

		//验证当前用户状态
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin();
		//调用浏览历史接口删除的接口
		$B2cHistory = new B2cHistory();
		$B2cHistory->delUserProHistory($_SESSION['_userid'],array($_POST['prh_pro_id']));
		
		LibFc::ajaxJsonEncode(['status'=>true,'data'=>'删除成功！']);
	}

/**
	* @method 删除整一天浏览历史
	* @param  
	* @author xu
	* @copyright 2017/7/4
	* @return  成功：{'res':'success'} 失败：{'res':'false'} {'res':'Illegal operation!'}
	*/
	function delWholeDayProhistory()
	{	
		//校验当前用户状态
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin();
		$B2cBase = new B2cBase();
		$B2cHistory = new B2cHistory();
		// 时间
		if(empty($_POST['time'])) LibFc::ajaxJsonEncode(['status'=>true,'data'=>'参数错误！']);
		// 分类
		$partId = (!empty($_POST['partId']) && (!LibFc::Int($_POST['partId']) || $_POST['partId']!='other'))?$_POST['partId']:0;
		// 接口删除
		$B2cHistory->delDayProHistory($_SESSION['_userid'],$_POST['time'],$partId);
		LibFc::ajaxJsonEncode(['status'=>true,'data'=>'删除成功！']);
	}
	/**
	 * @method    收藏的店铺
	 * @author 卢
	 * @copyright 2017-07-05
	 */
	function collShop()
	{
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin();		
		$userId=$_SESSION['_userid'];
		$Params = mvc::$URL_PARAMS;
		LibTpl::Set('Params', $Params);
		LibTpl::Set('on', $Params['order']);//条件（stop/run）
		$order='';//全部（run/stop）
		if(isset($Params['order']) && !empty($Params['order']))
		{
			switch ($Params['order']) {			
				case 'stop':
					$order=' and shop_status!=1';
					break;
			}
		}
		$type=isset($Params['order'])?$Params['order']:'all';
		//搜索关键字
		$keyword=isset($Params['keyword']) ? " and shop_name like '%".LibFc::Escape($Params['keyword'])."%'" : '';
		//当前页
		$nowPage = isset($Params['page']) && $Params['page'] > 0 ? (int) $Params['page']:1;
		$B2cCollShop = new B2cCollShop();
		// // 总条数
		$condition=sprintf(' and shc_uid=%d',$userId);
		$condition.=isset($_SESSION['_shopid'])?sprintf(' and shc_shop_id!=%d',$_SESSION['_shopid']):'';	
		$totalData=$B2cCollShop->get('us_shop_collection ',['count(*) total'],$condition,true);
		$total = $totalData['data']['total'];
		LibTpl::Set('totalAll', $total);//所有总数
		// 单页数
		$PerPage = 3;
		// 根据用户ID
		$baseWhere=sprintf(' and shc_uid=%d',$userId);
		$baseWhere.=isset($_SESSION['_shopid'])?sprintf(' and shc_shop_id!=%d',$_SESSION['_shopid']):'';
		// 根据关键字条件
		$where.=$baseWhere.$keyword.$order;
		// echo $where;
		// 获取店铺列表4条
		$shopData=$B2cCollShop->getUserCollShopList($userId,$where,'shc_add_time desc',$nowPage,$PerPage,$type);
		// print_r($shopData);
		//获取店铺信息/用户信息 作联系用
		// 分页	
		$Page = LibPage::Show($shopData['data']['totalAll'], $PerPage);
		//失效数量
		$table=sprintf('us_shop_collection a left join sh_shop b on a.shc_shop_id=b.shop_id and a.shc_uid=%d',$userId);
		$where3=isset($_SESSION['_shopid'])?sprintf(' and shc_shop_id!=%d and shop_status<1',$_SESSION['_shopid']):' and shop_status<1';
		$numData=$B2cCollShop->get($table,['count(*) count'],$where3,true);						
		LibTpl::Set('stopCount',$numData['data']['count']);//失效数量
		LibTpl::Set('list', $shopData['data']);//店铺数组
		LibTpl::Set('Page', $Page);
		$headArr = [
			'title'=>'收藏的店铺-跑街的',	
			'keyword'=>'',	
			'des'=>''
		];
		LibTpl::Set('LeftMenu', 'collShop');
		LibTpl::Set('headArr', $headArr);		
		LibTpl::Put();
	}
	/**
	 * @method    ajax删除收藏店铺
	 * @author 卢
	 * @copyright 2017-07-06
	 * @return
	 */
	function ajaxDeleteUserCollShop()
	{
		$shopId=trim($_POST['shopId'],',');
		$userId=$_SESSION['_userid'];
		$B2cCollShop = new B2cCollShop();
		$res=$B2cCollShop->delUserCollShop($userId,explode(',', $shopId));
		LibFc::ajaxJsonEncode($res);		
	}
	/**
	 * @method    ajax切换商品
	 * @author 卢
	 * @copyright 2017-07-06
	 */
	function ajaxChangeProduct()
	{
		$userId=$_SESSION['_userid'];
		$Params = mvc::$URL_PARAMS;
		$B2cCollShop = new B2cCollShop();
		$exit=array();		
		$existData=$B2cCollShop->Get('us_shop_collection',['shc_shop_id'],' and shc_uid='.$userId);
		foreach ($existData['data'] as $key => $value) 
		{
			$exit[]=$value['shc_shop_id'];
		}
		if(!LibFc::Int($Params['shopId'])||!in_array($Params['shopId'], $exit))
		{
			LibFc::ajaxJsonEncode(array('status'=>false,'data'=>'店铺不属于该用户'));
			exit;
		}
		$weekTime=time()-(7*24*60*60);
		$order='pro_add_time desc';
		$sort1='';
		$sort2='';
		$productWhere='';
		$where='';			
		if(isset($Params['sort']))
		{
			switch ($Params['sort']) {
				case 'sdesc'://热销
					$limitArrData=$B2cCollShop->get('bc_product left join sh_shop on shop_id=pro_shop_id',['pro_id','pro_shop_id'],sprintf(' and pro_shop_id =%d and shop_status=1 and pro_status=1 and pro_count>0 order by pro_sold_count desc',$Params['shopId']));
					$limitArr=array_column($limitArrData['data'], 'pro_id');
					$limitArr=array_slice($limitArr, 0,20);

					$where.=count($limitArr)?sprintf(' and pro_id in(%s)',implode(',',$limitArr)):' and pro_id<-1';

					$order='pro_sold_count desc';					
					$sort1='tdesc';
					break;
				case 'tdesc'://最新
					$limitArrData=$B2cCollShop->get('bc_product left join sh_shop on shop_id=pro_shop_id',['pro_id','pro_shop_id'],sprintf(' and pro_shop_id =%d and shop_status=1 and pro_status=1 and pro_count>0 order by pro_add_time desc',$Params['shopId']));
					$limitArr=array_column($limitArrData['data'], 'pro_id');
					$limitArr=array_slice($limitArr, 0,20);

					$where.=count($limitArr)?sprintf(' and pro_id in(%s)',implode(',',$limitArr)):' and pro_id<-1';

					$order='pro_add_time desc';				
					$sort2='sdesc';
					break;
			}
		} 
		$where.=sprintf('and pro_shop_id=%d',$Params['shopId']).$productWhere;
		$productData=$B2cCollShop->getProductByShopId($where,$order,$Params['page'],4);
		LibTpl::Set('sort', $Params['sort']);
		LibTpl::Set('sort1', $sort1);
		LibTpl::Set('sort2', $sort2);
		LibTpl::Set('data', $productData['data']);
		LibTpl::Set('shopId', $Params['shopId']);
		LibTpl::Set('ajaxPage', $Params['page']);
		$res=LibTpl::Fetch('user/ajaxChangeProduct.php');
		LibFc::ajaxJsonEncode(array('status'=>true,'data'=>$res));
	}

	/**
	 * @method 我的优惠-店铺会员卡
	 * @author xu
	 * @copyright 2017-08-02
	 * @return
	 */
	function favourable()
	{
		//检验登陆状态
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin();
		$B2cBase = new B2cBase();

		//参数
		$Params = mvc::$URL_PARAMS;
		$NowPage = isset($Params['page']) && $Params['page'] > 0 ? (int) $Params['page']:1;

		//数量
		$where=' and mem_shop_id=meml_shop_id and mem_status=1 and meml_uid='.$_SESSION['_userid'];
		$Res = $B2cBase->get('sh_member_link left join sh_member on meml_mem_id=mem_id', ['count(*) count'], $where, true);
		$Total = $Res['data']['count'];
		$temp = array();
		if($Total>0)
		{
			$B2cUserFavourable = new B2cUserFavourable();
			$temp = $B2cUserFavourable->getMemCardMsg($PerPage = 20,$NowPage,$_SESSION['_userid']);
			$temp = $temp['data'];
		}
		LibTpl::Set('dataArr', $temp);

		//等级描述
		$res = $B2cBase->Get('sh_member_level',['*']);
		$leveldes = array_column($res['data'], 'mel_name' ,'mel_id');
		LibTpl::Set('leveldes',$leveldes);

		// 页码
		$Page = LibPage::Show($Total, $PerPage);
		LibTpl::Set('Page', $Page);

		// meta
		$headArr = [
			'title'=>'收藏的店铺-跑街的',	
			'keyword'=>'',	
			'des'=>''
		];
		LibTpl::Set('LeftMenu', 'favourable');
		LibTpl::Set('headArr', $headArr);		
		LibTpl::Put();
	}

	/**
	 * @method    商品评价页面
	 * @author     廖
	 * @copyright 2017-08-07
	 */
	function comment()
	{
		//检验登陆状态
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin();
		$headArr = [
			'title'=>'订单评价-跑街的',	
			'keyword'=>'',	
			'des'=>''
		];
		LibTpl::Set('headArr', $headArr);
		$Params = mvc::$URL_PARAMS;
		//评价总订单
		if(LibFc::Int($Params['orderId']))
		{
			//检验订单是否已经完成
			$B2cComment = new B2cComment();
			$proId = $Params['proId'];
			$checkOrd = $B2cComment->Get('or_order join or_order_product on ord_id = orp_ord_id',['count(*) as count'],sprintf(" and ord_id=%d and ord_uid=%d and ord_status='completed' and (ord_evaluate='0' or orp_evaluate='0') and ord_seller_delete='0'",$Params['orderId'],$_SESSION['_userid']),true);
			// print_r($checkOrd);
			//订单已确认收货
			if($checkOrd['data']['count'] > 0)
			{
				$re = $B2cComment->getOrderProInfo($Params['orderId'],$proId,$_SESSION['_userid']);
				// print_r($re);
				if(!$re['ordAll']['isEva'] || !empty($re['proAll']))
				{
					LibTpl::Set('comProInfo', $re);
				}else
				{
					LibTpl::Error('没有订单要评价',mvc::$cfg['HOST']['b2c'].'user/myComment',5);
				}
			}else
			{
				LibTpl::Error('没有订单要评价',mvc::$cfg['HOST']['b2c'].'user/myComment',5);
			}
		}else
		{
			LibTpl::Error('订单错误',mvc::$cfg['HOST']['b2c'].'user/myComment',5);
		}
		$this->HEAD_CSSJS['plugin'][] = 'webuploader';
		$this->HEAD_CSSJS['js'][] = 'js/userComment.js';
		$this->HEAD_CSSJS['css'][] = 'css/userComment.css';
		LibTpl::Set('HEAD_CSSJS', $this->HEAD_CSSJS);
		LibTpl::Put();
	}
	/**
	 * @method    保存订单评价信息
	 * @author     廖
	 * @copyright 2017-08-08
	 */
	function saveComment()
	{
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin();
		$Params = mvc::$URL_PARAMS;
		$_POST['incognito'] = $Params['incognito'];
		$B2cComment = new B2cComment();
		if(LibFc::Int($_POST['ordId']) )
		{
			$dataArr = [];
			$proId = '';
			switch ($_POST['order']) 
			{
				case 'order':
					$dataArr = [
						'eva_service_score'=>$_POST['service'],
						'eva_logistics_score'=>$_POST['logistics'],
						'eva_courier_score'=>$_POST['courier'],
						'eva_suggest'=>$_POST['shopAdv'],
						'eva_incognito'=> $_POST['incognito'] == 'on' ? '1':'0',
					];
					break;
				case 'product':
					$proId = $_POST['proId'];
					$dataArr =[
						'evp_orp_id'=>$_POST['proAutoId'],
						'evp_score'=>$_POST['comscore'],
						'or_evaluate_label'=>$_POST['comCustom'],
						'or_evaluate_label_link'=>$_POST['labelId'],
						'evp_comment'=>$_POST['orderEval'],
						'or_evaluate_img'=>$_POST['imgs'],
						'evp_incognito'=>$_POST['incognito']=='on' ? '1' : '0'
					];
					break;
			}
			if (!empty($dataArr))
			{
				$re = $B2cComment->saveComment($dataArr,$_SESSION['_userid'],$_POST['ordId'],$_POST['shopId'],$proId,$_POST['order']);

				LibFc::ajaxJsonEncode($re);
			}else
			{
				LibFc::ajaxJsonEncode(['status'=>false,'data'=>'参数错误！']);
			}
		}else
		{
			LibFc::ajaxJsonEncode(['status'=>false,'data'=>'参数错误！']);
		}
	}
	/**
	 * @method    消息
	 * @author     廖
	 * @copyright 2017-10-18
	 */
	public function message()
	{
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin();
		$Params = mvc::$URL_PARAMS;
		$B2cNotice = new B2cNotice();
		$typeList = $B2cNotice->getNoticeType();
		LibTpl::Set('typeList', $typeList);
		$order = isset($Params['order'])?$Params['order']:'system';
		LibTpl::Set('order',$order);
		//获取每个类型消息的总数
		$typeListArr = $B2cNotice->getNoticeCount($_SESSION['_userid'],false);
		//获取每个类型未读消息的总数
		$typeNoReadListArr = $B2cNotice->getNoticeNoReadCount($_SESSION['_userid'],false);
		// print_r($typeNoReadListArr);
		LibTpl::Set('typeNoReadListArr',$typeNoReadListArr['data']);
		//每个消息类型的
		if(!empty($typeListArr['data']))
		{
			if(array_key_exists($order,$typeListArr['data']))
			{
				$Total = $typeListArr['data'][$order];
				$perPage = 10;
				if($Total>0)
				{	
					$nowPage = isset($Params['page']) ? $Params['page'] : 1;
					$baseWhere = $order=='private'?sprintf('and (nol_uid=%d or not_send_uid=%d)',$_SESSION['_userid'],$_SESSION['_userid']):sprintf(' and nol_uid=%d',$_SESSION['_userid']);
					$where = sprintf(" and not_type='%s' and not_end_time>%d %s and nol_delete='0' order by not_add_time desc",LibFc::Escape($order),time(),$baseWhere);
					$res = $B2cNotice->getNoticeInfo($nowPage,$perPage,$Total,$where,$order,$_SESSION['_userid']);
					$res['data'] = array_column($res['data'],null, 'not_id');
					//物流通知处理
					if($order=='track' && !empty($res['data']))
					{
						$notArr = array_column($res['data'], 'not_txt','not_id');
						$proArr = [];
						$proId = [];
						foreach ($notArr as $key => $value) 
						{
							if(!empty($arr = json_decode($value,true)))
							{
								$proArr[$key] = array_column($arr,null,'orp_pro_id');
								$proId = array_merge($proId,$proArr[$key]);
							}
						}
						$B2cProduct = new B2cProduct();
						$proImg = $B2cProduct->getProductPic(array_unique(array_column($proId,'orp_pro_id')));
						LibTpl::Set('proInfo', $notArr);
						LibTpl::Set('trackArr', $proArr);
						LibTpl::Set('proImg', $proImg['data']);
					}
					LibTpl::Set('msgArr', $res['data']);
					LibTpl::Set('uId',$_SESSION['_userid']);
				}
				//获取每个类型信息的内容
				$Page = LibPage::Show($Total, $perPage);
				LibTpl::Set('Page', $Page);
			}else LibTpl::Set('close',$close=true);
		}else LibTpl::Set('close',$close=true);
		LibTpl::Set('typeListArr',$typeListArr['data']);
		$headArr = array(
			'title'=>'消息管理-跑街的',	
			'keyword'=>'',	
			'des'=>''
		);
		LibTpl::Set('headArr', $headArr);
		$this->HEAD_CSSJS['js'][] = 'js/message.js';
		LibTpl::Set('HEAD_CSSJS', $this->HEAD_CSSJS);
		LibTpl::Put();
	}
	/**
	 * @method    ajax控制消息开关
	 * @author     廖
	 * @copyright 2017-10-18
	 */
	public function ajaxMsgSettingSwitch()
	{
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin();
		$order = $_POST['order'] == 'on'?'1':'0';
		if($_POST['type']=='system') $type = 'ub_notice_system';
		if($_POST['type']=='track') $type = 'ub_notice_track';
		if($_POST['type']=='private') $type = 'ub_notice_private';
		if($_POST['type']=='promotion') $type = 'ub_notice_promotion';
		if(!empty($type))
		{
			$B2cBase = new B2cBase();
			$res = $B2cBase->Set('us_user_base',[$type=>$order],' and ub_uid='.$_SESSION['_userid']);
			LibFc::ajaxJsonEncode($res);
		}
		else LibFc::ajaxJsonEncode(['status'=>false,'data'=>'参数不正确!']);
	}
	/**
	 * @method    ajax消息管理
	 * @author     廖
	 * @copyright 2017-10-18
	 */
	public function ajaxManageMsg()
	{
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin();
		$B2cNotice = new B2cNotice();
		if($_POST['order']=='del')
		{
			if(!empty($_POST['mid']))
			{
				$arr = explode(',',trim($_POST['mid'],','));
				if(!empty($arr))
				{
					$res = $B2cNotice->setNoticeDelte($arr, $_SESSION['_userid']);
					LibFc::ajaxJsonEncode($res);
				}
			}	
		}
		else LibFc::ajaxJsonEncode(['status'=>false,'data'=>'参数不正确!']);
	}
	/**
	 * @method    ajax保存私信内容
	 * @author     廖
	 * @copyright 2017-10-19
	 */
	public function ajaxSavePrivate()
	{
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin();
		if($_POST['sendTo'] !='')
		{
			$B2cNotice = new B2cNotice();
			$uidArr = array();
			if(LibFc::Int($_POST['sendId']))
			{
				$uidArr[] = $_POST['sendId'];
			}else
			{
				$res = $B2cNotice->Get('us_user_base',['ub_uid']," and ub_username='".LibFc::Escape($_POST['sendTo'])."'",true);
				if(!empty($res['data']['ub_uid']))
				{
					if($res['data']['ub_uid'] !=$_SESSION['_userid'])
					{
						$uidArr[] = $res['data']['ub_uid'];
					}else
					{
						LibFc::ajaxJsonEncode(['status'=>false,'data'=>'不能写信给自己!']);
					die;
					}
				}else
				{
					LibFc::ajaxJsonEncode(['status'=>false,'data'=>'没有找到接收者!']);
					die;
				}
			}
			$dataArr = array();
			$dataArr['not_send_uid'] = $_SESSION['_userid'];
			$dataArr['not_type'] = 'private';
			$dataArr['not_title'] = '';
			$dataArr['not_txt'] = $_POST['sendTxt'];
			$dataArr['not_end_time'] = (time()+(100*365*24*60*60));
			$dataArr['not_all_user'] = '0';
			$res = $B2cNotice->addNotice($dataArr, $uidArr);
			LibFc::ajaxJsonEncode($res);
		}
		else LibFc::ajaxJsonEncode(['status'=>false,'data'=>'参数不正确!']);
	}
	/**
	 * @method    ajax删除订单
	 * @author 卢
	 * @copyright 2017-08-10
	 */
	public function ajaxDelOrder()
	{
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin();
		$Params = mvc::$URL_PARAMS;
		$B2cOrder = new B2cOrder();
		$orderArr=is_array($_POST['orderId'])?$_POST['orderId']:[$_POST['orderId']];
		$orderArr=array_filter($orderArr,'LibFc::Int');
		if(count($orderArr))
		{
			$real=$_POST['real']=='real'? true:false;

			$status=$B2cOrder->get('or_order',['ord_status','ord_id','ord_user_delete'],sprintf(' and ord_uid=%d and ord_id in(%s)',$_SESSION['_userid'],implode(',', $orderArr)));

			$orderId=[];
			$forbidArr=[];
			foreach ($status['data'] as $k => $v) 
			{
				if(($v['ord_status']=='cancel'||$v['ord_status']=='creat'))
				{
					$orderId[]=$v['ord_id'];
					continue;
				}
				$forbidArr[]=$v['ord_id'];
			}
			// print_r($status['data']);
			if(count($orderId)>0)
			{
				$res=$B2cOrder->delOrder($orderId,$_SESSION['_userid'],true,$real);
			}
			else
			{
				$res=['status'=>false,'data'=>'订单号为：'.implode(',',$forbidArr).'的订单不允许删除'];
			}
			LibFc::ajaxJsonEncode($res);
		}
		// print_r($_POST);
		// die;
	}
	/**
	 * @method    取消订单
	 * @return    [type]      [description]
	 * @author 卢
	 * @copyright 2017-08-10
	 */
	public function cancelOrder()
	{
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin();
		$Params = mvc::$URL_PARAMS;
		$B2cOrder = new B2cOrder();
		$orderId=(int)$_POST['orderId'];
		if($orderId)
		{
			$statusData=$B2cOrder->get('or_order',['ord_status'],sprintf(' and ord_uid=%d and ord_id=%d',$_SESSION['_userid'],$orderId),true);
			$res=['status'=>false,'data'=>'不允许取消订单'];
			if($statusData['data']['ord_status']=='creat')
			{
				$reason=$_POST['reason'];
				if($_POST['reason']==2)
				{
					$reason=$_POST['otherReason'];
				}
				$res=$B2cOrder->updateOrderStatus($orderId,$_SESSION['_userid'],['ord_status'=>'cancel','ord_cancel_reason'=>$reason],$isUser=true);
			}
			LibFc::ajaxJsonEncode($res);
		}
	}
	/**
	 * @method    订单详情
	 * @author 卢
	 * @copyright 2017-08-08
	 */
	public function detail()
	{
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin();
		$B2cOrder = new B2cOrder();
		$YpwAddr= new YpwAddr();
		$this->HEAD_CSSJS['css'][] ='css/order.css';
		$this->HEAD_CSSJS['js'][] ='js/user.js';
		$Params = mvc::$URL_PARAMS;
		$headArr = array(
			'title'=>'订单详情-跑街的',	
			'keyword'=>'',	
			'des'=>''
		);
		LibTpl::Set('HEAD_CSSJS', $this->HEAD_CSSJS);
		LibTpl::Set('headArr', $headArr);
		LibTpl::Set('LeftMenu','order');
		if(LibFc::Int($Params['orderId']))
		{
			$res=$B2cOrder->get('or_order',['count(*) count'],sprintf(' and ord_id=%d and ord_uid=%d',LibFc::Int($Params['orderId']),$_SESSION['_userid']),true);
			if(!$res['data']['count'])
			{
				LibFc::Go(mvc::$cfg['HOST']['b2c'].'order/orderErr?ordId='.$Params['orderId']);
				exit();
			}
			$orderRes=$B2cOrder->getOrderDetail($Params['orderId'],$_SESSION['_userid'],true);
			//获取运单
			if($orderRes['data']['ord_status']!='cancel'&&$orderRes['data']['ord_status']!='paied'&&$orderRes['data']['ord_status']!='creat')
			{
				$extId = array_column($orderRes['data']['proArr'],'orp_ext_id','orp_id');
				if(count($extId))
				{
					$pro_ext = [];
					foreach ($extId as $k=>$v) 
					{
						$pro_ext[$v][] = $k;
					}
					$B2cExpress = new B2cExpress();
					$expInfo = $B2cExpress->getLogisticInfo(array_unique(array_values($extId)),true);
					if(!empty($expInfo['data']['same']))
					{
						foreach ($expInfo['data']['same'] as $key => $value) 
						{
							if(!empty($value))
							{
								foreach ($value as $v) 
								{
									$pro_ext[$key] = array_merge($pro_ext[$key],$pro_ext[$v]);
									unset($pro_ext[$v]);
								}
							}
						}
					}
					unset($expInfo['data']['same']);
					LibTpl::Set('ext',$pro_ext);
					LibTpl::Set('expInfo',$expInfo['data']);
				}		
			}
			//店铺信息
			$shopInfo=$B2cOrder->Get('sh_shop',['*'],sprintf(' and shop_id=%d',$orderRes['data']['ord_shop_id']),true);
			// print_r($shopInfo);
			$addrInfo=$YpwAddr->getAddrByIds($shopInfo['data']['shop_pct_ids']);
			// print_r($orderRes['data']);
			// print_r($proInfoRes['data']);
			LibTpl::Set('addrInfo',implode('', $addrInfo['data']));
			LibTpl::Set('shopInfo',$shopInfo['data']);
			// LibTpl::Set('proInfo',$proInfoRes['data']);
			LibTpl::Set('orderInfo',$orderRes['data']);
			LibTpl::Put();
			exit();
		}
		LibTpl::Error('订单信息错误','/user/order');
		exit();
	}
	/**
	 * @method    订单回收站
	 * @author 卢
	 * @copyright 2017-08-18
	 */
	public function recyledOrder()
	{
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin();
		$B2cOrder = new B2cOrder();
		$Params = mvc::$URL_PARAMS;
		$headArr = array(
			'title'=>'订单回收站-跑街的',	
			'keyword'=>'',	
			'des'=>''
		);
		LibTpl::Set('headArr', $headArr);
		LibTpl::Set('LeftMenu','recyledOrder');
		$perPage=10;
		$nowPage=isset($Params['page']) ? $Params['page'] : 1;
		$baseWhere=sprintf(' and ord_uid=%d and ((ord_user_delete=1 and ord_seller_delete=1) or (ord_user_delete=1 and ord_seller_delete=0) or (ord_user_delete=0 and ord_seller_delete=1))',$_SESSION['_userid']);
		$where=$baseWhere;
		$baseOrderBy='ord_add_time desc';
		$orderBy=$baseOrderBy;
		$orderListData=$B2cOrder->getOrderList($nowPage,$perPage,$orderBy,$where);
		LibTpl::Set('orderList', $orderListData['data']);
		$Page = LibPage::Show($orderListData['data'][0]['total'], $perPage);
		LibTpl::Set('Page', $Page);
		LibTpl::Put();
	}
	/**
	 * @method    还原订单
	 * @author 卢
	 * @copyright 2017-08-18
	 */
	public function ajaxRestoreOrder()
	{		
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin();
		$B2cOrder = new B2cOrder();
		$res=['status'=>false,'data'=>false];
		if(empty($_POST['orderId']))
		{
			LibFc::ajaxJsonEncode($res);
			exit();
		}
		$orderArr=is_array($_POST['orderId'])?$_POST['orderId']:[$_POST['orderId']];
		$orderArr=array_filter($orderArr,'LibFc::Int');		
		if(count($orderArr)>0)
		{
			$res=$B2cOrder->restoreDeleteOrder($orderArr,$_SESSION['_userid'],true);
			// $target=['ord_user_delete'=>0,'ord_seller_delete'=>0];
			// $res=$B2cOrder->set('or_order',$target,sprintf(' and ord_id IN(%s) and ord_uid=%d',implode(',',$orderArr),$_SESSION['_userid']));
			// if($res['status']&&$res['data'])
			// {
			// 	foreach ($orderArr as $k => $v) 
			// 	{
			// 		//恢复删除订单，加销量，减库存(拍下减库存的配件)
			// 		$B2cOrder->updateOrdSaleNum($v,'add','');
			// 	}
			// }			
		}
		LibFc::ajaxJsonEncode($res);
	}
	/**
	 * @method    确认收货
	 * @author 卢
	 * @copyright 2017-08-29
	 */
	public function affirmOrder()
	{
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin();
		$B2cOrder = new B2cOrder();
		$Params = mvc::$URL_PARAMS;
		$res=['status'=>false,'data'=>'参数不正确'];
		if(LibFc::Int($Params['orderId']))
		{
			$re=$B2cOrder->get('or_order',['count(1) count'],sprintf(' and ord_id=%d and ord_uid=%d',$Params['orderId'],$_SESSION['_userid']),true);
			if($re['data']['count'])
			{
				$res=$B2cOrder->orderCompleted($Params['orderId']);	
			}else{
				$res['data']='订单不属于该用户';
			}
		}
		LibFc::ajaxJsonEncode($res);
	}
	
	/**
	 * @method    查看营业执照
	 * @author     廖
	 * @copyright 2017-09-12
	 * @return
	 */
	function viewBusinessLicense()
	{
		//$OthCheck = new OthCheck();
		//$OthCheck->mustLogin();
		$Params = mvc::$URL_PARAMS;
		LibTpl::Set('Params',$Params);
		if(LibFc::Int($Params['shopId']))
		{
			$B2cBase = new B2cBase();
			$re = $B2cBase->Get('sh_shop',['shop_license'],' and shop_id='.$Params['shopId'],true);
			LibTpl::Set('lic',$re['data']);
			/*if(!empty($_SESSION['BusinessImageCode']) && strtoupper($Params['imageCode']) == $_SESSION['BusinessImageCode'])
			{
				
				unset($_SESSION['BusinessImageCode']);
			}
			else
			{
				LibTpl::Set('imageCode',true);
			}*/
		}
		else
		{
			LibTpl::Error('信息错误!');
		}
		LibTpl::Put();
	}

	/**
	 * @method 加载右侧导航条
	 * @author xu
	 * @copyright 2017-09-21
	 * @return right bar tpl
	 */
	function refreshRightBar()
	{
		// 参数
		if(!empty($_SESSION['_userid']) && LibFc::Int($_SESSION['_userid']))
		{
			// 购物车数量
			$B2cShoppingCart = new B2cShoppingCart();
			$res = $B2cShoppingCart->getCarGoodNum($_SESSION['_userid']);
			LibTpl::Set('thisUserCartNum',$res['data']);
		}
		$Tpl = LibTpl::Fetch('user/rightBar.php');
		LibFc::ajaxJsonEncode(['status'=>true,'data'=>$Tpl]);
	}
	/**
	 * @method 查看公告
	 * @author 廖
	 * @copyright 2017-09-30
	 */
	function viewAnnou()
	{

		$Params = mvc::$URL_PARAMS;
		$can = true;
		if($Params['order'] =='notLogin')
		{
			$artIdArr = array('899','909','910','911','912','913','914','915','916','917');
			if(!LibFc::Int($Params['artId']) || !in_array($Params['artId'], $artIdArr))
			{
				$can = false;
			}
			else
			{
				$title = '跑街的-查看公告';
				LibTpl::Set('notLogin',true);
			}
			
		}
		else
		{
			$OthCheck = new OthCheck();
			$OthCheck->mustLogin();
			$title = '我的商城-查看公告';
		}
		$headArr = array(
			'title'=>$title.'-跑街的',	
			'keyword'=>'',	
			'des'=>''
		);
		LibTpl::Set('headArr', $headArr);
		if(LibFc::Int($Params['artId']) && $can)
		{
			$B2cBase = new B2cBase();
			$res = $B2cBase->get('cm_article',['art_title','art_txt','art_add_time','art_last_time']," and art_id=".$Params['artId']." and art_status='pass'",true);
			LibTpl::Set('art', $res['data']);
		}
		LibTpl::Put();
	}

	/**
	 * @method 合并车型浏览历史cookie到database之中
	 * @author xu
	 * @copyright 2017-12-26
	 */
	function mergeMycar()
	{
		// 校验登录
		if(empty($_SESSION['_userid']) || empty($_SESSION['_username']))
		{
			LibFc::ajaxJsonEncode(['status'=>true, 'data'=>true]);
		}

		if(isset($_COOKIE['carHistiry']))
		{
			$data = explode('|', $_COOKIE['carHistiry']);
			// 获取cookie拼接成入库的arr
			$cartHistory = array();
			foreach ($data as $k => $v)
			{
				$tmp = explode(':',$v);
				// cookie之中解析的数组如果不是1的那就不是爱车直接设置为0
				if($tmp[1]<0)
				{
					$tmp[1]=0;
				}
				$cartHistory[] = array('mod3Id'=>current($tmp),'coll'=>$tmp[1]);
			}
			$B2cUser = new B2cUser();
			// 传递接口入库数据
			$B2cUser->mergeMycar($cartHistory,$_SESSION['_userid']);
			// 清除cookie
			setCookie('carHistiry', '', time()-3600*24*7, '/', mvc::$cfg['HOST']['b2c'], true, true);
			LibFc::ajaxJsonEncode(['status'=>true, 'data'=>true]);
		}
	}
	/**
	 * @method    用户评价
	 * @author     廖
	 * @copyritht 2018-1-5
	 */
	function myComment()
	{
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin();
		LibTpl::Set('LeftMenu', 'myComment');
		$Params = mvc::$URL_PARAMS;
		$perPage = 10;
		$nowPage=isset($Params['page']) ? $Params['page'] : 1;
		$B2cOrder = new B2cOrder();
		$order = isset($Params['order']) ? $Params['order'] : 'wait';
		LibTpl::Set('order', $order);
		$headArr = [
			'title'=>'我的评价-跑街的',	
			'keyword'=>'',	
			'des'=>''
		];
		//计算未评论的数量

		$waitCount  = $B2cOrder->get('or_order',['count(*) count']," and ord_status='completed' and ord_user_delete=0 and (ord_evaluate=0 or ord_id in(select orp_ord_id from or_order_product where orp_status='completed' and orp_evaluate=0)) and ord_uid=".$_SESSION['_userid'],true);

		LibTpl::Set('waitCount', $waitCount['data']['count']);

		switch ($order) {
			case 'wait':

				$evaluateWhere = " and ord_status='completed' and ord_user_delete=0 and (ord_evaluate=0 or ord_id in(select orp_ord_id from or_order_product where orp_status='completed' and orp_evaluate=0))";

				break;
			case 'done':
				$evaluateWhere = "and orp_evaluate=1 and ord_status='completed'";
				break;		
		}
		$baseWhere = sprintf(' and ord_uid=%d and ord_user_delete=0 ',$_SESSION['_userid']);
		$where = $baseWhere.$evaluateWhere;
		// print_r($where);
		$baseOrderBy = 'ord_add_time desc';
		$orderListData = $B2cOrder->getOrderList($nowPage,$perPage,$baseOrderBy,$where);
		$arr = ['wait'=>'1','done'=>'0'];
		
		if($order=='done')
		{
			$B2cComment = new B2cComment();
			$orderEva = $B2cComment->getorderComInfo(array_column($orderListData['data'], 'ord_id'));
			LibTpl::Set('orderEva', $orderEva['data']);
		}
		LibTpl::Set('orderList', $orderListData['data']);
		$Page = LibPage::Show($orderListData['data'][0]['total'], $perPage);
		LibTpl::Set('headArr', $headArr);
		$Page = LibPage::Show($total, $perPage);
		LibTpl::Set('Page', $Page);
		LibTpl::Put();
	}
	/*
	 *ajax 获取反馈弹窗内容
	 */
	function ajaxGetAdvHtml()
	{
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin();

		$YpwUser = new YpwUser();
		//用户信息
		$res = $YpwUser->getUser(['u_mobile','ui_qq'], ' and u_id='.$_SESSION['_userid'], true);
		LibTpl::Set('infoArr',$res['data']);
		$res=LibTpl::Fetch('user/ajaxGetAdvHtml.php');
		LibFc::ajaxJsonEncode(['status'=>true,'data'=>$res]);
	}

	/*
	 *ajax 保存反馈信息
	 */
	function saveUserAdv()
	{
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin();
		if((!empty($_POST['u_mobile']) || !empty($_POST['qq_number'])) && !empty($_POST['u_adv']))
		{
			$dataArr = [];
			$adv_imgs = [];
			if(!empty($_POST['imgs']))
			{
				foreach ($_POST['imgs'] as $key => $value) 
				{
					$res = json_decode($value,true)['sfile'];
					if (!empty($res))
						$adv_imgs[] = $res;
				}
			}

			$dataArr['adv_status'] = 0;
			$dataArr['adv_url'] = LibFc::Escape($_POST['url']);
			$dataArr['adv_txt'] = LibFc::Escape($_POST['u_adv']);
			$dataArr['adv_imgs'] = implode($adv_imgs, ',');
			$dataArr['adv_qq'] = $_POST['qq_number'];
			$dataArr['adv_tel'] = $_POST['u_mobile'];
			$dataArr['adv_from'] = mvc::$cfg['SITE_NAME'];
			$dataArr['adv_ip'] = LibFc::GetClientIp();

			$MainAdvise = new MainAdvise();
			$res = $MainAdvise->saveUserAdv($dataArr,$_SESSION['_userid']);
			LibFc::ajaxJsonEncode($res);
		}else
		{
			LibFc::ajaxJsonEncode(['status'=>false,'data'=>'参数不正确!']);
		}
	}
	/**
	 * @method    企业会员申请页面
	 * @author 卢
	 * @copyright 2018-04-02
	 */
	function applyCom()
	{
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin();
		$B2cUser=new B2cUser();
		$res=$B2cUser->get('us_user_base left join us_com_apply on uca_uid =ub_uid',['ub_level','uca_status','uca_chk_remark','ub_com_name','ub_com_img','ub_com_license','ub_com_code','ub_com_pct_ids','ub_com_idcard'],sprintf(' and ub_uid=%d',$_SESSION['_userid']),true);
		if($res['data']['ub_level'])
			LibFc::Go('/user/index');
		if(!empty($res['data']))
		{
			$res['data']['ub_com_idcard']=explode(',', $res['data']['ub_com_idcard']);
		}
		// print_r($res);
		LibTpl::Set('data', $res['data']);
		$this->HEAD_CSSJS['plugin'][] = 'webuploader';
		LibTpl::Set('HEAD_CSSJS', $this->HEAD_CSSJS);
		LibTpl::Set('LeftMenu', 'applyCom');
		$headArr = [
			'title'=>'企业会员申请-跑街的',
			'keyword'=>'',	
			'des'=>''
		];
		LibTpl::Set('headArr', $headArr);
		LibTpl::Put();
	}
	/**
	 * @method    检查唯一性
	 * @author 卢
	 * @copyright 2018-04-02
	 */
	function checkComUnique()
	{
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin();
		$Params = mvc::$URL_PARAMS;
		$B2cUser=new B2cUser();
		if(empty($Params['name'])&&empty($Params['code']))
		{
			LibFc::ajaxJsonEncode(['status'=>false,'data'=>'企业名称或社会信用代码不正确!']);
			exit();
		}
		$where=sprintf(' and ub_uid!=%d',$_SESSION['_userid']);
		if(isset($Params['name']))
		{
			$where.=sprintf(" and ub_com_name='%s'",LibFc::Escape($Params['name']));
			$error='企业名称已被使用！';
		}elseif(isset($Params['code'])){
			$where.=sprintf(" and ub_com_code='%s'",LibFc::Escape($Params['code']));
			$error='社会信用代码已被使用！';
		}
		else
		{
			LibFc::ajaxJsonEncode(['status'=>false,'data'=>'参数不正确']);
			exit();
		}
		//校验统一社会信用代码和企业名称唯一
		$res=$B2cUser->get('us_user_base',['count(1) count'],$where,true);
		if($res['data']['count']>0)
			LibFc::ajaxJsonEncode(['status'=>false,'data'=>$error]);
		else
			LibFc::ajaxJsonEncode(['status'=>true,'data'=>true]);
	}

	/**
	 * @method 检查企业名称或社会信用代码唯一性
	 * @author xu
	 * @copyright 2018-04-02
	 */
	function checkComNameUnique()
	{
		// 需求改动-取消唯一性校验 
		// LibFc::ajaxJsonEncode(['status'=>true,'data'=>true]);

		$Params = mvc::$URL_PARAMS;
		$B2cUser=new B2cUser();

		if(empty($Params['name']) && empty($Params['code'])) LibFc::ajaxJsonEncode(['status'=>false,'data'=>'企业名称或社会信用代码不正确!']);

		$where = sprintf(' and ub_uid!=%d',$_SESSION['_userid']);
		if(isset($Params['name']))
		{
			$where.=sprintf(" and ub_com_name='%s'",LibFc::Escape($Params['name']));
			$error='企业名称已被使用！';
		}elseif(isset($Params['code'])){
			$where.=sprintf(" and ub_com_code='%s'",LibFc::Escape($Params['code']));
			$error='社会信用代码已被使用！';
		}
		else
		{
			LibFc::ajaxJsonEncode(['status'=>false,'data'=>'参数不正确']);
		}
		//校验统一社会信用代码和企业名称唯一
		$res = $B2cUser->get('us_user_base',['count(1) count'],$where,true);
		if($res['data']['count']>0)
			LibFc::ajaxJsonEncode(['status'=>false,'data'=>$error]);
		else
			LibFc::ajaxJsonEncode(['status'=>true,'data'=>true]);
	}



	/**
	 * @method   撤销申请
	 * @author 卢
	 * @copyright 2018-04-02
	 */
	function revokeApply()
	{
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin();
		$B2cUser=new B2cUser();
		$res=$B2cUser->set('us_com_apply',['uca_status'=>-1],sprintf(' and uca_uid=%d',$_SESSION['_userid']));
		LibFc::ajaxJsonEncode($res);
	}

	/**
	 * @method    企业会员申请入库
	 * @author 卢
	 * @copyright 2018-04-02
	 */
	function setApply()
	{
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin();
		$Params = mvc::$URL_PARAMS;
		// print_r($_POST);
		// die;
		if(empty($_POST['comName'])||mb_strlen($_POST['comName'],'utf-8')>100)
		{
			LibTpl::Error('企业名称不正确！');
			exit();
		}
		if(mb_strlen($_POST['societyCode'],'utf-8')!=18)
		{
			LibTpl::Error('统一社会信用代码不正确！');
			exit();
		}
		$add=isset($_POST['type'])&&$_POST['type']=='edit'?false:true;
		$B2cUser=new B2cUser();
		$res=$B2cUser->applyCom($_POST,$_SESSION['_userid'],$add);
		LibFc::ajaxJsonEncode($res);
	}



	/**
	  * @method 企业会员注册
	  * @author xu 2018/04/09
	  */
	function companyRegister()
	{
		//用户未登录才可以操作
		$OthCheck = new OthCheck();
		$OthCheck->notLogin();
		
		// meta
		$headArr = [
			'title'=>'企业注册-跑街的',	
			'keyword'=>'',	
			'des'=>''
		];
		$this->HEAD_CSSJS['plugin'][] = 'webuploader';
		LibTpl::Set('HEAD_CSSJS', $this->HEAD_CSSJS);
		LibTpl::Set('headArr', $headArr);
		LibTpl::Put();
	}
	
	/**
	  * @method 企业会员注册提交
	  * @author xu 2018/04/09
	  */
	function companyRegisterAjax()
	{
		//用户未登录才可以操作
		$OthCheck = new OthCheck();
		$OthCheck->notLogin();

		if(empty($_POST['tkey']) || $_SESSION['tkey'] != $_POST['tkey']) 
			LibFc::ajaxJsonEncode(['status'=>false,'data'=>'请求异常，获取数据失败！']);
		unset($_SESSION['tkey']);
		
		if(empty($_POST['data']))
			LibFc::ajaxJsonEncode(['status'=>false,'data'=>'参数错误！']);
		parse_str($_POST['data'], $post);
		$post = array_filter($post);
		// 字段非空校验
		$errTips = [
			'mobile' => '手机号码不存在',
			'imgcode' => '验证码不存在',
			'mobile_code' => '手机注册验证码不存在',
			'regname' => '用户名不存在',
			'password' => '密码不存在',
			'password2' => '二次输入密码确认不存在',
			'companyName' => '公司名称不存在',
			'societyCode' => '社会信用代码不存在',
			'license' => '营业执照不存在',
			'idFront' => '身份证正面照不存在',
			'idBack' => '身份证背面照不存在'

		]; 
		$errTipsKey = array_keys($errTips);
		$postKeys = array_keys($post);
		$emptyKeys = array_diff($errTipsKey, $postKeys);
		if(!empty($emptyKeys)) {
			$error = array_map(function($v)use($errTips){return $errTips[$v];}, $emptyKeys);
			LibFc::ajaxJsonEncode(['status'=>false,'data'=>current($error)]);
		}
		if(empty($post['province']) || empty($post['province'][0])) LibFc::ajaxJsonEncode(['status'=>false,'data'=>'企业地址必须填写']);
		if(empty($post['companyOne']) && empty($post['companyTwo']) && empty($post['companyThree'])){
			LibFc::ajaxJsonEncode(['status'=>false,'data'=>'至少上传一张企业门面照']);
		}
		$comImgs = array_filter(array(
			empty($post['companyOne'])?'':$post['companyOne'],
			empty($post['companyTwo'])?'':$post['companyTwo'],
			empty($post['companyThree'])?'':$post['companyThree']
		));
		// 企业注册信息
		if(!LibFc::RegularValida($post['companyName'],'companyName'))
			LibFc::ajaxJsonEncode(['status'=>false,'data'=>'企业名称不正确！']);
			
		if(!LibFc::RegularValida($post['societyCode'],'societyCode'))
			LibFc::ajaxJsonEncode(['status'=>false,'data'=>'统一社会信用代码不正确！']);

		if($_SESSION['imgcode'] != strtoupper($post['imgcode']))
			LibFc::ajaxJsonEncode(['status'=>false,'data'=>'图形验证码错误，请重新输入！']);
		unset($_SESSION['imgcode']);
		// 二次密码
		if(trim($post['password']) != trim($post['password2']))
			LibFc::ajaxJsonEncode(['status'=>false,'data'=>'两次输入密码不一致，请重新输入！']);
		// 短信码
		$LibYpApi = new LibYpApi();
		$temp = ['mobile'=>$post['mobile'],'style'=>'bind','from'=>'PJD','code'=>$post['mobile_code']];
		$res = $LibYpApi->Get('sms/checkMobileCode', $temp, [], true);
		if(!$res['status'])
			LibFc::ajaxJsonEncode(['status'=>false,'data'=>$res['data']]);
		// 用户名、密码校验
		$temp = [
			'u_name'=>$post['regname'],
			'u_password'=>$post['password'],
			'u_mobile_check'=>'Y',
			'u_mobile'=>$post['mobile']
		];
		$res = $LibYpApi->Get('user/register', [], ['data'=>$temp, 'lang'=>'cn']);
		$userId = (int) $res['data'];
		// 使短信码失效
		$temp = ['mobile'=>$post['mobile'],'style'=>'bind','from'=>'PJD'];
		$LibYpApi->Get('sms/outMobileCode', $dataArr, [], true);
		// 同步用户信息
		$B2cUser = new B2cUser();
		$B2cUser->updateUserByApi();
		// 为用户新增企业注册申请信息
		$temp = array(
		    'comName' => $post['companyName'],
		    'licenceImg' => $post['license'],
		    'societyCode' => $post['societyCode'],
		    'cardImgs' => [$post['idFront'],$post['idBack']],
		    'comImgs' => $comImgs,
		    'province' => $post['province']
		);
		$B2cUser=new B2cUser();
		$B2cUser->applyCom($temp,$userId,true);
		// 注册完成
		LibFc::ajaxJsonEncode(['status'=>true,'data'=>$post['regname']]);
	}
	function getQqUrl()
	{
		$Params = MVC::$URL_PARAMS;
		$LibYpApi = new LibYpApi();
		$res = $LibYpApi->get('qq/getQQUserUrl', ['app'=>'web_yp', 'backUrl'=>mvc::$cfg['HOST']['b2c'].'user/bindQq?by=qq&goto='.$Params['goto'], 'scope'=>'']);
		LibFc::ajaxJsonEncode($res);
	}
	/*
	*微信 QQ 注册登录
	*/
	function bindQq()
	{
		$OthCheck = new OthCheck();
		$OthCheck->notLogin();
		$Params = MVC::$URL_PARAMS;
		$error='';
		$LibYpApi = new LibYpApi();
		if(!empty($_POST['unionid'])&&!empty($_POST['info']))
		{
			$QQUserArr=json_decode(base64_decode($_POST['info']), true);
			if(empty($_POST['imgcode']) || $_SESSION['imgcode'] != strtoupper($_POST['imgcode']))
			{
				$error = '验证码错误，请重新输入';
			}
			else if(empty($_POST['loginname']) || empty($_POST['password']))
			{
				$error = '请重新输入用户名、密码';
			}
			else{
				$PostData = [
					'type'=>'password',
					'data'=>['name'=>$_POST['loginname'],'password'=>$_POST['password']],
					'lang'=>'cn'
				];
				$PostData['data']['ip'] = LibFc::GetClientIp();
				$PostData['data']['from'] = 'PJD';
				$ResArr = $LibYpApi->Get('user/login', [], $PostData, true);
				if($ResArr['status'] && !empty($ResArr['data']['u_id']))
				{
					unset($_SESSION['imgcode']);
					$this->loginSession($ResArr);
					$PostArr = [
						'uid'=>$_SESSION['_userid'],
						'data'=>['qq'=>['bind'=>'Y', 'u_qq_unionid'=>$_POST['unionid'], 'u_qq_info'=>base64_decode($_POST['info'])]],
						'lang'=>'cn'
					];
					$LibYpApi->Get('user/bind_account', [], $PostArr);
					LibFc::Go(mvc::$cfg['HOST']['b2c'].'user/safety');
				}
				else
				{
					$error = $ResArr['data'];
				}
			}
		}
		else if(!empty($Params['udata']))
		{
			$QQUserArr = json_decode(base64_decode($Params['udata']), true);
			if(isset($QQUserArr['unionid']))
			{
				$PostData = [
					'type'=>'qq',
					'data'=>['unionid'=>$QQUserArr['unionid'],'openid'=>$QQUserArr['openid']],
					'lang'=>'cn'
				];
				$PostData['data']['ip'] = LibFc::GetClientIp();
				$PostData['data']['from'] = 'PJD';		
				$ResArr = $LibYpApi->Get('user/login', [], $PostData, true);
				if($ResArr['status'] && !empty($ResArr['data']['u_id']))
				{
					$this->loginSession($ResArr);
					//登录成功
					$goto=!empty($Params['goto'])?$Params['goto']:mvc::$cfg['HOST']['b2c'].'user/index';
					LibFc::Go($goto);
				}else{
					$error=$res['data'];
				}
			}else{
				LibFc::Go(mvc::$cfg['HOST']['b2c'].'user/login');
			}
		}
		else
		{
			LibFc::Go(mvc::$cfg['HOST']['b2c'].'user/login');
		}		
		$headArr = [
			'title'=>'QQ绑定-跑街的',	
			'keyword'=>'',	
			'des'=>''
		];
		LibTpl::Set('QQUserArr', $QQUserArr);
		LibTpl::Set('error', $error);
		LibTpl::Set('headArr', $headArr);
		$this->HEAD_CSSJS['css'][] = 'css/login.css';
		LibTpl::Set('HEAD_CSSJS', $this->HEAD_CSSJS);
		LibTpl::Put();
	}

	/**
	 * @method API接口统计
	 * @author zhengweihua 
	 * @copyright 2024-02-18
	 */
	public function apiTj()
	{
		$MainBase = new MainBase();
		$where = sprintf(' AND au_uid=%d AND au_etime>=%d',$_SESSION['_shopid'],time());
		$res = $MainBase->get('api_user', ['count(*) as count'], $where, true);
		$tjTotal = $res['data']['count'];
		if($tjTotal<=0) LibTpl::Error('没有相关记录');
		//已开通的接口
		$actArr = [];
		$table = 'api_user_act join api_act on aua_aa_id = aa_id';
		$res = $MainBase->get($table,['aa_act,aa_name'],sprintf(" AND aua_uid=%d",$_SESSION['_shopid']));
		$actArr = array_column($res['data'],'aa_name','aa_act');
		LibTpl::Set('actArr',$actArr);
		//最近一个月的数据
		$field = ["ash_date,ash_act,count(*) as counts"];
		$where = sprintf(" AND ash_uid=%d AND ash_from='api' AND ash_atime>=%d group by ash_act,ash_date order by ash_atime desc",$_SESSION['_shopid'],strtotime(date('Y-m-d',strtotime( '-30 days'))));
		$res = $MainBase->get('api_search_history',$field,$where);
		// $ashTypeArr = array_unique(array_column($res['data'],'ash_act'));
		// LibTpl::Set('ashTypeArr',$ashTypeArr);
		$arr = [];
		foreach ($res['data'] as $key => $val) {
			$arr[$val['ash_date']][$val['ash_act']] = $val['counts'];
		}
		LibTpl::Set('tjArr',$arr);
		$headArr = [
			'title'=>'API接口统计-跑街的',	
			'keyword'=>'',	
			'des'=>''
		];
		LibTpl::Set('headArr', $headArr);
		LibTpl::Set('LeftMenu', 'apiTj');
		LibTpl::Put();
	}

	/**
	 * @method 接口VIN查询历史
	 * @author hongzhang
	 * @copyright 2026-08-07
	 */
	public function VINTj()
	{
		$MainBase = new MainBase();
		$Params = mvc::$URL_PARAMS;

		// 日期筛选：默认最近7天
		$startDate = isset($Params['start_date']) && $Params['start_date'] ? $Params['start_date'] : date('Y-m-d', time()-7*24*3600);
		$endDate = isset($Params['end_date']) && $Params['end_date'] ? $Params['end_date'] : date('Y-m-d');
		$startTime = strtotime($startDate);
		$endTime = strtotime($endDate) + 86400; // 包含当天

		// 分页参数
		$nowPage = isset($Params['page']) && $Params['page'] > 0 ? (int)$Params['page'] : 1;
		$perPage = isset($_COOKIE['perPage']) && $_COOKIE['perPage'] > 0 ? (int)$_COOKIE['perPage'] : 15;

		$where = sprintf(' AND ash_uid=%d AND ash_atime>=%d AND ash_atime<%d', $_SESSION['_shopid'], $startTime, $endTime);

		// 查询总数
		$countRes = $MainBase->get('api_search_history', ['count(*) as count'], $where, true);
		$total = $countRes['data']['count'];

		if ($total > 0) {
			$where .= sprintf(' ORDER BY ash_atime DESC LIMIT %d,%d', ($nowPage-1)*$perPage, $perPage);
			$res = $MainBase->get('api_search_history', ['ash_date','ash_val','ash_ip','ash_from','ash_atime'], $where);
			$VINTjArr = $res['data'];
		} else {
			$VINTjArr = [];
		}

		$fromArr = [
			'api'=>'API接口',
			'super'=>'公众号目录',
			'superpjl'=>'品牌目录',
			'gzh'=>'商城版目录',
			'robot'=>'机器人'
		];

		$Page = LibPage::Show($total, $perPage, true);
		LibTpl::Set('VINTjArr', $VINTjArr);
		LibTpl::Set('fromArr', $fromArr);
		LibTpl::Set('Page', $Page);
		LibTpl::Set('startDate', $startDate);
		LibTpl::Set('endDate', $endDate);
		LibTpl::Put();
	}
}