<?php
class userAction extends baseAction
{	
	function index()
	{
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin('gzhs');
		$B2cBase=new B2cBase();
		//计算每个状态数量
		//待付款
		$statusCount=$B2cBase->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' and ord_shop_id=%d",$_SESSION['_userid'],mvc::$cfg['SHOPID']),true);
		$sCount['creat']=$statusCount['data']['count'];
		//代发货
		$statusCount=$B2cBase->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' and ord_shop_id=%d group by ord_id",$_SESSION['_userid'],mvc::$cfg['SHOPID']));
		$sCount['paied']=count($statusCount['data']);
		//待收货
		$statusCount=$B2cBase->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' and ord_shop_id=%d",$_SESSION['_userid'],mvc::$cfg['SHOPID']),true);
		$sCount['send']=$statusCount['data']['count'];
		//待评价
		$statusCount=$B2cBase->get('or_order',['count(*) count'],sprintf(" 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=%d and ord_shop_id=%d",$_SESSION['_userid'],mvc::$cfg['SHOPID']),true);
		$sCount['evaluate']=$statusCount['data']['count'];
		$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' and ord_shop_id=%d",$_SESSION['_userid'],mvc::$cfg['SHOPID']));
		$sCount['refund']=count($reOrder['data']);
		// print_r($sCount);
		LibTpl::Set('sCount',$sCount);
		$YpwUser = new YpwUser();
		$FieldArr = array('u_nickname','u_real_name','u_logo','ui_sex','ui_work','ui_company','ui_qq','u_weixin_bd','u_weixin_info','u_weixin_unionid');
		$res = $YpwUser->getUser($FieldArr, ' and u_id='.$_SESSION['_userid'], true);
		if($res['data']){
			$res['data']['u_weixin_info'] = $res['data']['u_weixin_info']?json_decode($res['data']['u_weixin_info'],true):[];
		}
		LibTpl::Set('infoArr',$res['data']);
		//收藏数
		$res=$B2cBase->get('us_product_collection inner join bc_product on pro_id=prc_pro_id',['count(1) count'],sprintf(' and prc_uid=%d and pro_shop_id=%d',$_SESSION['_userid'],mvc::$cfg['SHOPID']),true);
		LibTpl::Set('collNum',$res['data']['count']);
		//浏览记录
		$res=$B2cBase->get('us_product_history inner join bc_product on pro_id=prh_pro_id',['count(1) count'],sprintf(' and prh_uid=%d and pro_shop_id=%d',$_SESSION['_userid'],mvc::$cfg['SHOPID']),true);
		LibTpl::Set('historyNum',$res['data']['count']);
		// print_r($res);
		LibTpl::Set('footMenu', 'user');
		LibTpl::Set('title', '个人中心');
		LibTpl::Put();
	}
	/**
	 * @method    登录检查
	 * @author 卢
	 * @copyright 2018-07-19
	 */
	function checkLogin()
	{
		$Params = mvc::$URL_PARAMS;
		$arr = ['cart'=>0, 'uid'=>0, 'wxfastlogin'=>$_SESSION['wxfastlogin']];
		if(empty($_SESSION['_userid']))
		{
			$B2cUser = new B2cUser();
			if(!empty($Params['wxid']) && strlen($Params['wxid']) > 10)
			{
				$res = $B2cUser->loginByAny('weixin', ['unionid'=>$Params['wxid'], 'openid'=>$Params['wxid'], 'from'=>'PJDSGZH']);
				if($res['status'] && !empty($res['data']['u_id']))
				{
					$res['data']['type'] = 'weixin';
					$res['data']['unionid'] = $Params['wxid'];
					$this->loginSession($res);
					$arr['autologin'] = 1;
				}
			}
			else if(!empty($Params['utag']) && strlen($Params['utag']) > 10)
			{
				$res = $B2cUser->loginByAny('token', ['utag'=>$Params['utag'], 'from'=>'PJDSGZH']);
				if($res['status'] && !empty($res['data']['u_id']))
				{
					$res['data']['auto'] = 1;
					$this->loginSession($res);
					$arr['autologin'] = 1;
				}
			}
		}
		if(!empty($_SESSION['_userid']))
		{
			$arr['uid'] = $_SESSION['_userid'];
			$B2cBase =new B2cBase();
			$B2cShoppingCart = new B2cShoppingCart();
			// 调用接口获取当前购物车数量
			$res = $B2cShoppingCart->getCarGoodNum($_SESSION['_userid'],false, sprintf(" and car_uid=%d and pro_shop_id=%d",$_SESSION['_userid'], mvc::$cfg['SHOPID']));
			// print_r($res);
			// $res = $B2cBase->get('us_cart join bc_product on car_pro_id=pro_id', ['sum(car_count) as count'], sprintf(" and car_uid=%d and pro_shop_id=%d",$_SESSION['_userid'], mvc::$cfg['SHOPID']), true);
			$arr['cart'] = (int) $res['data'];
		}
		LibFc::ajaxJsonEncode(['status'=>true, 'data'=>$arr]);
	}

	/**登录页**/
	function login()
	{
		$Params = mvc::$URL_PARAMS;
		$OthCheck = new OthCheck();
		$OthCheck->notLogin('gzhs');
		LibTpl::Set('bodyClass', 'hideuserlogin');
		LibTpl::Set('Params', $Params);
		LibTpl::Set('footMenu', 'user');
		LibTpl::Set('title', '会员登录');
		LibTpl::Put();
	}

	function loginByWx()
	{
		$Params = mvc::$URL_PARAMS;
		if(!empty($Params['goto']))
		{
			$_SESSION['wx_login_goto'] = urldecode($Params['goto']);
		}
		else if(!empty($Params['backUrl']))
		{
			$_SESSION['wx_login_goto'] = base64_decode($Params['backUrl']);
		}
		if(!empty($Params['udata']))
		{
			$WXUserArr = json_decode(base64_decode($Params['udata']), true);
			if(!empty($WXUserArr['unionid']))
			{
				$_SESSION['wxfastlogin'] = 1;
				$B2cUser = new B2cUser();
				$res = $B2cUser->loginByAny('weixin', ['unionid'=>$WXUserArr['unionid'],'openid'=>$WXUserArr['openid'], 'from'=>'PJDSGZH']);
				if($res['status'] && !empty($res['data']['u_id']))
				{
					$B2cUser->checkShopUser(mvc::$cfg['SHOPID'],$res['data']['u_id']);
					$res['data']['auto'] = 1;
					$res['data']['type'] = 'weixin';
					$res['data']['unionid'] = $WXUserArr['unionid'];
					$this->loginSession($res, true);
				}
				else
				{
					//微信未绑定 跳转绑定界面
					LibFc::Go(mvc::$cfg['SELF_URI'].'user/bindWeixin?udata='.$Params['udata']);
				}
			}
			else if(!empty($WXUserArr['openid']))
			{//静默模式，只取openid
				$_SESSION['wxfastlogin'] = 1;
				$B2cUser = new B2cUser();
				$res = $B2cUser->loginByAny('weixin', ['openid'=>$WXUserArr['openid'], 'from'=>'PJDSGZH']);
				if($res['status'] && !empty($res['data']['u_id']))
				{
					$B2cUser->checkShopUser(mvc::$cfg['SHOPID'],$res['data']['u_id']);
					$res['data']['auto'] = 1;
					$res['data']['type'] = 'weixin';
					$res['data']['unionid'] = $WXUserArr['openid'];
					$this->loginSession($res, true);
				}
			}
			if(empty($_SESSION['_userid'])){
				$goto = !empty($Params['goto']) ? $Params['goto'] : (!empty($_SESSION['wx_login_goto']) ? $_SESSION['wx_login_goto'] : mvc::$cfg['SELF_URI']);
				LibFc::Go(mvc::$cfg['SELF_URI'].'user/login?goto='.urlencode($goto));
			}

		}else if($Params['type'] == 'fast'){
			//静默模式，只取openid
			$LibYpApi = new LibYpApi();
			$goto = !empty($Params['goto']) ? $Params['goto'] : (!empty($_SESSION['wx_login_goto']) ? $_SESSION['wx_login_goto'] : mvc::$cfg['SELF_URI']);
			if(stripos($_SERVER['HTTP_USER_AGENT'], 'micromessenger') !== false)
				$res = $LibYpApi->get('wx/getWxUserUrl', ['app'=>'gzh', 'backUrl'=>mvc::$cfg['SELF_URI'].'user/loginByWx?type=fast&backUrl='.base64_encode($goto), 'scope'=>'snsapi_base']);
			else
				$res = $LibYpApi->get('wx/getWxUserUrl', ['app'=>'gzh_app', 'backUrl'=>mvc::$cfg['SELF_URI'].'user/loginByWx?type=fast&backUrl='.base64_encode($goto), 'scope'=>'snsapi_base']);
			Header("Location: ".$res['data']);
		}else{
			$LibYpApi = new LibYpApi();
			$goto = !empty($Params['goto']) ? $Params['goto'] : (!empty($_SESSION['wx_login_goto']) ? $_SESSION['wx_login_goto'] : mvc::$cfg['SELF_URI']);
			if(stripos($_SERVER['HTTP_USER_AGENT'], 'micromessenger') !== false)
				$res = $LibYpApi->get('wx/getWxUserUrl', ['app'=>'gzh', 'backUrl'=>mvc::$cfg['SELF_URI'].'user/loginByWx?backUrl='.base64_encode($goto), 'scope'=>'snsapi_userinfo']);
			else
				$res = $LibYpApi->get('wx/getWxUserUrl', ['app'=>'gzh_app', 'backUrl'=>mvc::$cfg['SELF_URI'].'user/loginByWx?backUrl='.base64_encode($goto), 'scope'=>'snsapi_login']);
			Header("Location: ".$res['data']);
		}
	}

	/*
	*微信登录
	*/
	function bindWeixin()
	{
		$OthCheck = new OthCheck();
		$OthCheck->notLogin();
		
		$Params = mvc::$URL_PARAMS;
		if(!empty($Params['udata']))
		{
			$WXUserArr = json_decode(base64_decode($Params['udata']), true);
		}
		if(empty($WXUserArr['unionid']))
		{
			LibFc::Go(mvc::$cfg['SELF_URI'].'user/login');
		}
		LibTpl::Set('WXUserArr', $WXUserArr);
		LibTpl::Set('error', $error);
		LibTpl::Set('title', '微信绑定');
		LibTpl::Put();
	}

	function ajaxBindWeixin()
	{
		$OthCheck = new OthCheck();
		$OthCheck->notLogin();
		$Return = ['status'=>false,'data'=>'参数错误'];
		if(!empty($_POST['unionid']) && !empty($_POST['info']))
		{
			if(empty($_POST['imgcode']) || $_SESSION['imgcode'] != strtoupper($_POST['imgcode']))
			{
				$Return = ['status'=>false,'data'=>'验证码错误，请重新输入'];
			}
			else if(empty($_POST['username']) || empty($_POST['password']))
			{
				$Return = ['status'=>false,'data'=>'请重新输入用户名、密码'];
			}
			else
			{
				$LibYpApi = new LibYpApi();
				$PostData = [
					'type'=>'password',
					'data'=>['name'=>$_POST['username'],'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']))
				{
					$B2cUser = 	new B2cUser();
					$B2cUser->checkShopUser(mvc::$cfg['SHOPID'],$ResArr['data']['u_id']);
					unset($_SESSION['imgcode']);
					$ResArr['data']['auto'] = 1;
					$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'
					];
					$res = $LibYpApi->Get('user/bind_account', [], $PostArr);
					$Return = $res;
				}
				else
				{
					$Return = ['status'=>false,'data'=>$ResArr['data']];
				}
			}
		}
		LibFc::ajaxJsonEncode($Return);
	}

	function nameCheckcode()
	{
		$OthCheck = new OthCheck();
		$OthCheck->notLogin('gzhs');
		$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 ajaxLogin()
	{
		//验证码校验
		$LibYpApi = new LibYpApi();
		$res = $LibYpApi->Get('user/nameCheckcode', ['name'=>$_POST['username']], [], true);
		if($res['data'] && (empty($_POST['checkcode']) || $_SESSION['imgcode'] != strtoupper($_POST['checkcode'])))
		{
			$resArr = ['status'=>false, 'data'=>'验证码错误，请重新输入', 'code'=>'checkcode_error'];
		}
		else
		{
			$B2cUser = new B2cUser();
			$res = $B2cUser->loginByAny('password', ['name'=>$_POST['username'],'password'=>$_POST['password'], 'from'=>'PJDSGZH']);
			if($res['status'] && !empty($res['data']['u_id']))
			{
				//检测是否存在并添加
				$B2cUser->checkShopUser(mvc::$cfg['SHOPID'],$res['data']['u_id']);
				$res['data']['auto'] = (int) $_POST['auto'];
				unset($_SESSION['imgcode']);
				$this->loginSession($res);
				$resArr = [
					'status'=>true,
					'data'=>[
						'u_id'=>$_SESSION['_userid'],
						'u_name'=>$_SESSION['_username'],
						'u_mobliechk'=>$_SESSION['_mobliechk'],
						'utag'=>$res['data']['utag']
					]
				];
			}else{
				$resArr=['status'=>false,'data'=>$res['data']];
			}
		}
		LibFc::ajaxJsonEncode($resArr);	
	}


	/**
	  * @method 登录标识
	  * @author soul 2017/5/10
	  */
	private function loginSession($resArr, $go = false)
	{
		$Params = mvc::$URL_PARAMS;
		if(!empty($resArr['data']['u_id']))
		{
			$userData = $resArr['data'];
			$this->logoutSession();
			
			$LibPjlApi = new LibPjlApi();
			// $_SESSION['_pjltoken'] = '';
			// $res = $LibPjlApi->Get('base/buildToken', [], ['unitag'=>$userData['unitag']]);
			// $_SESSION['_pjltoken'] = $res['data']['token'];
			$_SESSION['_userid'] = $userData['u_id'];
			$_SESSION['_username'] = $userData['u_name'];
			$_SESSION['_uname'] = empty($userData['u_real_name'])? $_SESSION['_username']: $userData['u_real_name'];
			$_SESSION['_mobliechk'] = $userData['u_mobile_check'];

			//店主
			$_SESSION['_shopOwner'] = $_SESSION['_userid'] == mvc::$cfg['SHOPID'] ? 1: 0;
			
			if($go)
			{
				$backUrl = mvc::$cfg['SELF_URI'];
				if($_SESSION['_mobliechk'] != 'Y')
					$backUrl = mvc::$cfg['SELF_URI'].'user/bindMobile';
				else if(!empty($Params['goto']))
					$backUrl = urldecode($Params['goto']);
				else if(!empty($Params['backUrl']))
					$backUrl = base64_decode($Params['backUrl']);
				else if(!empty($_SESSION['wx_login_goto']))
				{
					$backUrl = $_SESSION['wx_login_goto'];
					unset($_SESSION['wx_login_goto']);
				}
				$script = '<script type="text/javascript">';

				if($userData['type'] == 'weixin' && !empty($userData['unionid']))
				{
					$script .= 'localStorage.setItem("wxid","'.$userData['unionid'].'");localStorage.setItem("utag","");';
				}
				else if(!empty($userData['auto']))
				{
					$script .= 'localStorage.setItem("utag","'.$userData['utag'].'");localStorage.setItem("wxid","");';
				}
				else
				{
					$script .= 'localStorage.removeItem("utag");localStorage.removeItem("wxid");';
				}
				echo $script.'window.location.href="'.$backUrl.'";</script>';
			}
		}
	}

	/**
	  * @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['_canbuy']);
		unset($_SESSION['wx_login_goto']);
		//不允许清除wxfastlogin，避免客户要换账号
	}
	/**
	  * @method 退出登录
	  * @author soul 2017/5/10
	  */
	function logout()
	{
		$this->logoutSession();
		$backUrl = mvc::$cfg['SELF_URI'].'user/login?goto='.urlencode($_SERVER["HTTP_REFERER"]);
		echo '<script type="text/javascript">localStorage.wxid="";localStorage.utag="";window.location.href="'.$backUrl.'";</script>';
	}
	/**
	  * @method 会员登录后重置密码
	  * @author soul 2017/5/10
	  */
	function resetpass()
	{
		//必须登录才可以进行
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin('gzhs');

		$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);
					LibFc::Go(mvc::$cfg['SELF_URI'].'user/index');
				}
			}
		}
		LibTpl::Set('Error', $Error);
		LibTpl::Set('footMenu', 'user');
		LibTpl::Set('title', '密码重置');
		LibTpl::Put();
	}
	/**
	  * @method 会员注册
	  * @author soul 2017/5/10
	  */
	function register()
	{
		//用户未登录才可以操作
		$OthCheck = new OthCheck();
		$OthCheck->notLogin('gzhs');
		$Error = '';
		if(!empty($_POST['mobile_code']) && !empty($_POST['mobile']) && !empty($_POST['imgcode']))
		{
			if($_SESSION['imgcode'] != strtoupper($_POST['imgcode']))
			{
				$Error = '验证码错误，请重新输入';
			}
			else
			{
				$LibYpApi = new LibYpApi();
				$B2cUser = new B2cUser();
				$UserDataArr = [
					'u_password'=>$_POST['password'],
					'mobile_code'=>$_POST['mobile_code'],
					'u_mobile'=>$_POST['mobile'],
					'u_from'=>'PJDSGZH',
					'u_from_uid'=>mvc::$cfg['SHOPID']
				];
				$ResArr = $LibYpApi->Get('user/register', [], ['data'=>$UserDataArr, 'lang'=>'cn']);
				$Uid = (int) $ResArr['data'];
				$B2cUser->checkShopUser(mvc::$cfg['SHOPID'],$Uid);	
				LibTpl::Set('UserDataArr', $UserDataArr);
				LibTpl::Set('footMenu', 'user');
				LibTpl::Set('title', '注册成功');
				unset($_SESSION['imgcode']);
				LibTpl::Put('user/registerOk.php');
				exit;
			}
		}
		LibTpl::Set('POST', $_POST);
		LibTpl::Set('Error', $Error);
		LibTpl::Set('footMenu', 'user');
		LibTpl::Set('title', '用户注册');
		LibTpl::Put();
	}
	/**
	  * @method 图片验证码
	  * @author soul
	  * @copyright 2017/5/9
	  */
	function imgcode()
	{
		$Params = mvc::$URL_PARAMS;
		$OthCheckcode = new OthCheckcode();
		$CofArr = [];
		if(!empty($Params['type']))
		{
			switch($Params['type'])
			{
				case 'reg':
				case 'login': $CofArr = ['height'=>40, 'width'=>90]; break;
				case 'business': $CofArr = ['session_key'=>'BusinessImageCode','level'=>4,'height'=>30, 'width'=>80]; break;
			}
		}
		$OthCheckcode->getImgcode($CofArr);
	}
	/**
	  * @method 发送手机验证码[图片验证码、登录两种发送渠道]
	  * @author soul
	  * @copyright 2017/5/9
	  */
	function sendMobilecode()
	{
		$Flag = false;
		$Mobile = trim($_POST['mobile']);
		$Act = $_POST['act'];
		
		if(!preg_match('/^1\d{10}$/', $Mobile))
		{
			$Return = ['status'=>false, 'data'=>'手机号码不正确', 'code'=>'mobile_error'];
			LibFc::ajaxJsonEncode($Return);
		}
		if(!in_array($Act, ['bind', 'unbind', 'password']))
		{
			$Return = ['status'=>false, 'data'=>'act 参数缺失', 'code'=>'act_error'];
			LibFc::ajaxJsonEncode($Return);
		}
		
		if(isset($_POST['imgcode']))
		{
			if($_SESSION['imgcode'] != strtoupper($_POST['imgcode']))
			{
				$Return = ['status'=>false, 'data'=>'图片验证码不正确', 'code'=>'imgcode_error'];
				LibFc::ajaxJsonEncode($Return);
			}
			else
			{
				$Flag = true;
			}
		}
		if(!empty($_SESSION['_userid']))
		{
			$Flag = true;
		}

		if(!$Flag)
		{
			$Return = ['status'=>false, 'data'=>'获取数据失败，请稍后重试。', 'code'=>'data_error'];
			LibFc::ajaxJsonEncode($Return);
		}

		$LibYpApi = new LibYpApi();
		$dataArr = [
			'mobile'=>$Mobile,	
			'style'=>$Act,
			'from'=>'PJDSGZH',
			'again'=>$_POST['count']
		];
		$Res = $LibYpApi->Get('sms/sendMobileCode', $dataArr, [], true);
		if($Res['status'])
		{
			$Return = ['status'=>true, 'data'=>'', 'code'=>''];
		}
		else
		{
			$Return = ['status'=>false, 'data'=>$Res['data'], 'code'=>'send_error'];
		}
		LibFc::ajaxJsonEncode($Return);
	}
	/**
	  * @method 申请重置密码
	  * @author soul 2017/5/10
	  */
	function getpass()
	{
		$OthCheck = new OthCheck();
		$OthCheck->notLogin('gzhs');

		$Params = mvc::$URL_PARAMS;
		if(isset($_POST['imgcode']))
		{
			// print_r($_POST);
			// die;
			if($_SESSION['imgcode'] != strtoupper($_POST['imgcode']))
			{
				$ErrorCode = 'checkcode_error';
			}
			else 
			{
				$LibYpApi = new LibYpApi();
				$B2cBase = new B2cBase();
				//校验验证码
				$dataArr = [
					'mobile'=>$_POST['mobile'],	
					'style'=>'password',
					'from'=>'PJDSGZH',
					'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'=>'PJDSGZH',
						];
						$LibYpApi->Get('sms/outMobileCode', $dataArr, [], true);
						LibFc::Go(mvc::$cfg['SELF_URI'].'user/setpass?item='.$Item);
						exit;
					}
				}
			}
		}
		LibTpl::Set('SendOk', $SendOk);
		LibTpl::Set('ErrorCode', $ErrorCode);
		//LibTpl::Set('POST', $_POST);
		LibTpl::Set('POST', $_POST);
		LibTpl::Set('footMenu', 'user');
		LibTpl::Set('title', '找回密码');
		LibTpl::Put();
	}
	/**
	  * @method 重置密码
	  * @author soul 2017/5/10
	  */
	function setpass()
	{
		$OthCheck = new OthCheck();
		$OthCheck->notLogin('gzhs');

		$Params = mvc::$URL_PARAMS;
		if(!empty($_POST['username']) && !empty($_POST['oldpass']) && !empty($_POST['password']) && !empty($_POST['password2']))
		{
			// print_r($_POST);
			// die;
			$LibYpApi = new LibYpApi();
			$dataArr = [
				'filed'=>['u_id', 'u_password','u_name'],
				'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);
			}
		}
		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);
				}
			}
		}
		// print_r($Params);
		LibTpl::Set('footMenu', 'user');
		LibTpl::Set('title', '重置密码');
		LibTpl::Put();
	}
	//注册协议
	function protocol()
	{
		LibTpl::Set('footMenu', 'user');
		LibTpl::Set('title', '用户注册协议');
		LibTpl::Put();
	}
	/**
	 * @method    订单列表
	 * @author 卢
	 * @copyright 2018-07-19
	 */
	function order()
	{
		$OthCheck = new OthCheck();
		$OthCheck->wxOpenId();
		$OthCheck->mustLogin('gzhs');
		$B2cOrder = new B2cOrder();
		$Params = mvc::$URL_PARAMS;
		LibTpl::Set('Params',$Params);
		//计算每个状态数量
		//待付款
		$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' and ord_shop_id=%d",$_SESSION['_userid'],mvc::$cfg['SHOPID']),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' and ord_shop_id=%d group by ord_id",$_SESSION['_userid'],mvc::$cfg['SHOPID']));
		$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' and ord_shop_id=%d",$_SESSION['_userid'],mvc::$cfg['SHOPID']),true);
		$sCount['send']=$statusCount['data']['count'];
		//待评价
		$statusCount=$B2cOrder->get('or_order',['count(*) count'],sprintf(" 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=%d and ord_shop_id=%d",$_SESSION['_userid'],mvc::$cfg['SHOPID']),true);
		$sCount['evaluate']=$statusCount['data']['count'];
		// print_r($sCount);
		LibTpl::Set('sCount',$sCount);
		$sCount['evaluate']=$statusCount['data']['count'];		
		LibTpl::Set('footMenu', 'order');
		LibTpl::Set('bodyClass', 'order-list-page bg');
		LibTpl::Set('title', '我的订单');
		LibTpl::Put();
	}
	/**
	 * @method    ajax获取订单
	 * @author 卢
	 * @copyright 2018-07-19
	 */
	function getOrder()
	{
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin('gzhs');
		$B2cOrder = new B2cOrder();
		$B2cProduct=new B2cProduct();
		$B2cBase=new B2cBase();
		$Params = mvc::$URL_PARAMS;
		$perPage=10;
		$monthTime=3*30*24*60*60;
		LibTpl::Set('Params',$Params);
		$where=sprintf(' and ord_shop_id=%d and ord_seller_delete=0 and ord_user_delete=0 and ord_uid=%d',mvc::$cfg['SHOPID'],$_SESSION['_userid']);
		$nowPage=!empty($Params['page']) ? $Params['page'] : 1;
		$status=isset($Params['status']) ? $Params['status'] : '';
		LibTpl::Set('status', $status);
		switch ($status) {			
			case 'creat':
				$where.=" and ord_status='creat'";
				break;
			case 'paied':
				$where.=" and ord_status='paied'";
				break;
			case 'send':
				$where.=" and ord_status='send'";
				break;
			case 'cancel':
				$where.=" and ord_status='cancel'";
				break;
			case 'refund':
				$where.=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' and ord_shop_id=%d",$_SESSION['_userid'],mvc::$cfg['SHOPID']));
				break;		
			case 'completed':
				$where.=" and ord_status='completed'";
				break;
			case 'evaluate':
				$where.=" and ((ord_evaluate>0 and (orp_evaluate<1 or orp_evaluate is null)) or ((ord_evaluate is null  or ord_evaluate<1) and orp_evaluate>0) or (ord_evaluate <1 and orp_evaluate<1)) and ord_status='completed'";
				break;
		}
		//配件名称和配件ID处理	
		if(isset($Params['proName'])&&!empty($Params['proName']))
		{
			$keywordArr=LibFc::keyword($Params['proName']);
			if(count($keywordArr))
			{
				$keywordStr="'".implode("','",$keywordArr)."'";
				$keywordWhere=sprintf(' and key_txt in(%s)',$keywordStr);
				$keywordProData=$B2cProduct->get('bc_keyword right join bc_product_keyword on prk_key_id=key_id',['prk_pro_id'],$keywordWhere);
			}
			if(!count($keywordArr)||!count($keywordProData['data']))
			{
				//关键字搜索为空，搜索名称
				$nameOrder=$B2cProduct->get('bc_product left join or_order_product on orp_pro_id=pro_id',['orp_ord_id'],sprintf(" and orp_pro_name like '%%%s%%' group by orp_ord_id",LibFc::Escape($Params['proName'])));
				if(count($nameOrder['data']))
				{
					$orderResArr=array_column($nameOrder['data'], 'orp_ord_id');
					$where.=sprintf(' and ord_id in(%s)',implode(',',$orderResArr));
				}
				else
				{
					$where.=' and ord_id <-1';
				}
			}else
			{
				$keywordPro=array_unique(array_column($keywordProData['data'],'prk_pro_id'));
				$where.=count($keywordPro)?sprintf(" and orp_pro_id in (%s)",implode(',',$keywordPro)):'';
			}
		}	
		$where.=(isset($Params['proId'])&&!empty($Params['proId']))&&LibFc::Int($Params['proId'])? ' and orp_pro_id='.$Params['proId'] : '';
		if(isset($Params['buyerName'])&&!empty($Params['buyerName']))
		{
			$userIdArr=$B2cProduct->get('us_user_base',['ub_uid'],sprintf(" and ub_username like'%%%s%%'",LibFc::Escape($Params['buyerName'])));
			if(count($userIdArr['data']))
			{
				$uIdArr=array_column($userIdArr['data'], 'ub_uid');
				$where.=sprintf(' and ord_uid in(%s)',implode(',',$uIdArr));
			}
			else
			{
				$where.=' and ord_id <-1';
			}
		}
		$where.=(isset($Params['completeMix'])&&!empty($Params['completeMix'])) ? sprintf(" and ord_add_time >%d",strtotime($Params['completeMix'])): '';
		$where.=(isset($Params['completeMax'])&&!empty($Params['completeMax'])) ? sprintf(" and ord_add_time <%d",strtotime($Params['completeMax'])): '';
		$where.=(isset($Params['orderId'])&&!empty($Params['orderId'])) ? sprintf(" and ord_id =%d",LibFc::Escape($Params['orderId'])): '';
		if($Params['date']){
			$datearr = explode(' ~ ', $Params['date']);
			$where.=sprintf(" and ord_add_time >%d and ord_add_time <%d",strtotime($datearr[0]),strtotime($datearr[1])+86399);
		}
		$baseOrderBy='ord_add_time desc';
		$orderBy=$baseOrderBy;
		$orderListData=$B2cOrder->getOrderList($nowPage,$perPage,$orderBy,$where);
		// print_r($orderListData['data']);
		LibTpl::Set('orderList', $orderListData['data']);

		$res=['status'=>true,'data'=>['tpl'=>'','totalPage'=>ceil($orderListData['data'][0]['total']/$perPage)]];
		if(!empty($orderListData['data']))
		{
			$res['data']['tpl']=LibTpl::Fetch('user/orderList.php');
		}
		LibFc::ajaxJsonEncode($res);
	}


	/**
	  * @method 浏览历史
	  * @author xu 2018/6/26
	  */
	function history()
	{

		$Params = mvc::$URL_PARAMS;
		$B2cBase = new B2cBase();
		LibTpl::Set('Params',$Params);

		LibTpl::Set('footMenu', 'user');
		LibTpl::Set('title', '浏览历史');
		LibTpl::Put();
	}


	/**
	  * @method 浏览历史异步加载
	  * @author xu 2018/6/26
	  */
	function ajaxHistory()
	{
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin('gzhs');

		$tpl = "";
		$Params = mvc::$URL_PARAMS;
		LibTpl::Set('Params',$Params);
		$B2cBase = new B2cBase();
		$page = !empty($Params['page'])?(int)$Params['page']:1;
		$perPage = 10;

		$B2cUser=new B2cUser();
		$res=$B2cUser->getUserMember($_SESSION['_userid'],mvc::$cfg['SHOPID']);
		$level=0;
		if(!empty($res['data']))
		{
			$level=$res['data']['mem_mel_id'];
		}
		$table = "us_product_history inner join bc_product on pro_id=prh_pro_id ";
		$where = sprintf("and prh_uid=%d and pro_shop_id=%d ",$_SESSION['_userid'],mvc::$cfg['SHOPID']);
		$res=$B2cBase->get($table,['count(1) count'],$where,true);
		// print_r($res);
		if($res['data']['count'])
		{
			$fieldArr=['pro_id','prh_pro_id','pro_promotion_price','pro_sale_price','pro_promotion_btime','pro_promotion_etime','pro_name','prh_uid','pro_shop_id','prh_ltime','pro_price_vip1','pro_price_vip2','pro_price_vip3','pro_price_vip4'];
			$where .=sprintf(" order by prh_ltime desc limit %d,%d", ($page-1)*$perPage, $perPage);
			$pro = $B2cBase->get('us_product_history left join bc_product on pro_id=prh_pro_id', $fieldArr, $where);
			$B2cProduct = new B2cProduct();
			$res = $B2cProduct->getProductPic(array_column($pro['data'], 'prh_pro_id'));
			foreach ($pro['data'] as $k => $v) {
				$pro['data'][$k]['pic'] = empty($res['data'][$v['prh_pro_id']])?[]:current($res['data'][$v['prh_pro_id']]);
			}
			$pro = $pro['data'];

			// 价格
			foreach ($pro as $k => $v) {
				if(!empty($v['pro_promotion_price']) && $v['pro_promotion_price']<$v['pro_sale_price'] && time()>$v['pro_promotion_btime'] && time()<$v['pro_promotion_etime'])
				{
					$pro[$k]['price'] = $v['pro_promotion_price'];
				}else{
					$pro[$k]['price'] = $v['pro_sale_price'];
				}
				if($level>0&& $v['pro_price_vip'.$level] > 0 && $v['pro_price_vip'.$level] < $pro[$k]['price'])
				{
					$pro[$k]['price'] = $v['pro_price_vip'.$level];
				}
			}

			// 日期分组
			$newPro = [];
			foreach ($pro as $k => $v) {
				$newPro[date("Y-m-d",$v['prh_ltime'])][] = $v;
			}
			LibTpl::Set('data',$newPro);
			// print_r($newPro);
			// 渲染
			$tpl = LibTpl::Fetch('user/ajaxLoadHistory.php');
		}
		LibFc::ajaxJsonEncode(['status'=>true,'data'=>['tpl'=>$tpl]]);

	}


	/**
	  * @method 收藏列表
	  * @author xu 2018/6/26
	  */
	function coll()
	{	
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin('gzhs');

		$Params = mvc::$URL_PARAMS;
		$B2cBase = new B2cBase();
		LibTpl::Set('Params',$Params);

		$table = "us_product_collection left join bc_product on pro_id=prc_pro_id ";
		$where = sprintf("and prc_uid=%d and pro_shop_id=%d ",$_SESSION['_userid'],mvc::$cfg['SHOPID']);

		$table1="us_product_collection left join bc_product on pro_id=prc_pro_id left join bc_product_sort on prs_pro_id=pro_id";
		// 店铺分类
		$res = $B2cBase->get($table1,['distinct prs_sort_id'],$where);
		$sortId = array_column($res['data'], 'prs_sort_id');
		LibTpl::Set('sortCount',count($sortId));
		if(!empty($sortId)){
			// $where.=sprintf(' and pro_id in(%s)',sprintf('select '));
			$res = $B2cBase->get('sh_sort',['sort_id','sort_name'],sprintf("and sort_id in (%s)",implode(',', $sortId)));
			LibTpl::Set('sort',array_column($res['data'], 'sort_name','sort_id'));
		}


		// 分类筛选
		if(!empty($Params['sort']) && LibFc::Int($Params['sort']))
			// $where .= ' and prs_sort_id='.$Params['sort'];
			$where.=sprintf(' and pro_id in (select prs_pro_id from bc_product_sort where prs_sort_id=%d)',$Params['sort']);
		if(!empty($Params['depre']) && $Params['depre']==1)
			$where .= ' and (pro_status<1 or pro_count<1)';
		else
			$where .= ' and pro_status>0 and pro_count>0 ';
		// 数量
		$res = $B2cBase->get($table,['count(*) count'],$where,true);
		// print_r($res);
		LibTpl::Set('count',$res['data']['count']);
		LibTpl::Set('footMenu', 'user');
		LibTpl::Set('title', '收藏记录');
		LibTpl::Put();
	}


	/**
	  * @method 根据订单号获取对应方式的支付链接或二维码
	  * @author soul 2017/8/12
	  */
	function getPayUrl()
	{
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin('gzhs');
		$Params = mvc::$URL_PARAMS;

		if(!in_array($Params['payBy'], ['weixin', 'alipay'])) LibFc::ajaxJsonEncode(['status'=>false, 'data'=>'支付方式不存在！']);
		$PayBy = $Params['payBy'];
		$payType = $Params['payType'];

		$temIdArr = [];
		foreach(explode(',', $Params['ordId']) as $v)
		{
			$temIdArr[] = (int) $v;
		}

		if(empty($temIdArr)) LibFc::ajaxJsonEncode(['status'=>false, 'data'=>'订单不存在或者已被删除！']);
		
		$B2cBase = new B2cBase();
		$where = sprintf(" and ord_id in (%s) and ord_status='creat' and ord_uid = %d and ord_shop_id=%d order by ord_id", implode(',', $temIdArr), $_SESSION['_userid'],  mvc::$cfg['SHOPID']);
		$res = $B2cBase->get('or_order', ['ord_id', 'ord_pay_money'], $where);
		$toPayArr = ['ids'=>[], 'money'=>0.00];
		foreach($res['data'] as $v)
		{
			$toPayArr['ids'][] = $v['ord_id'];
			$toPayArr['money'] += $v['ord_pay_money'];
		}
		if(empty($toPayArr['ids']))  LibFc::ajaxJsonEncode(['status'=>false, 'data'=>'订单状态异常，请稍后重试！']);

		//没有待支付的订单，跳转至订单列表页
		$ordIds = implode(',', $toPayArr['ids']);
		//付款减判断库存
		$res=$B2cBase->get('or_order_product left join bc_product on pro_id=orp_pro_id',['pro_id', 'pro_count', 'orp_count', 'orp_set_inventory'], sprintf(' and orp_ord_id in(%s)', $ordIds));
		foreach ($res['data'] as $v) 
		{
			if($v['orp_set_inventory'] < 1 && $v['orp_count'] > $v['pro_count'])
			{
				LibFc::ajaxJsonEncode(['status'=>false, 'data'=>'库存不足，请重新下单！']);
			}
		}

		$LibYpApi = new LibYpApi();
		$B2cOrder = new B2cOrder();

		//分别检查已创建的支付二维码状态
		$res = $B2cBase->get('or_order_pay_list_link join or_order_pay_list on opl_id = opll_opl_id', ['distinct opl_por_guid'], 
			sprintf(" and opll_ord_id in (%s) and opl_status != 'close' and opl_por_guid is not null", $ordIds));
		foreach($res['data'] as $v)
		{
			$res = $LibYpApi->get('order/checkPay', [], ['por_guid'=>$v['opl_por_guid']]);
			$payArr = $res['data'];
			if($payArr['por_status'] == 1)
			{
				//此交易在支付平台支付已完成，但是商城对应的订单状态未修改
				$res = $B2cBase->get('or_order_pay_list', ['opl_id'], sprintf(" and opl_por_guid='%s'", $v['opl_por_guid']), true);
				$B2cOrder->payOkByoplId($res['data']['opl_id']);
				LibFc::ajaxJsonEncode(['status'=>false, 'data'=>'订单已支付，请勿重复付款！']);
			}
		}

		//检查是否已经创建支付明细
		$where = sprintf(" and opl_style = 0 and opl_pam_code='%s' and opl_pay_type='%s' and opl_money=%.2f and opl_status='wait' and opl_por_id > 0", $PayBy, LibFc::Escape($payType), $toPayArr['money']);
		$res = $B2cOrder->getPayListId($where, $toPayArr['ids']);
		$oplDataArr = [];
		if(empty($res['data']))
		{
			$oplDataArr = [
				'opl_por_id'=>0,
				'opl_por_guid'=>LibFc::guid(),
				'opl_pam_code'=>$PayBy,
				'opl_pay_type'=>$payType,
				'opl_money'=>$toPayArr['money'],
				'opl_style'=>0
			];
			$res = $B2cOrder->addPayList($toPayArr['ids'], $oplDataArr);
			$oplId = $res['data'];
			$dataArr = [
				'por_guid'=>$oplDataArr['opl_por_guid'],
				'por_u_id'=>$_SESSION['_userid'],
				'por_orderids'=>$ordIds,
				'por_pay_method'=>$PayBy,
				'por_pay_type'=>$payType,
				'por_style'=>'PJDORD',
				'por_money'=>$toPayArr['money'],
				'por_title'=>'跑街的订单：'.$ordIds,
				'por_back_url'=>$backUrl,
				'por_wx_openid'=>$_SESSION['wx_oppenid'],
				'por_from'=>'PJDSGZH'
			];
			
			$res = $LibYpApi->get('order/buildPay', [], $dataArr);
			$payArr = $res['data'];
			$B2cBase->set('or_order_pay_list', ['opl_por_id'=>$payArr['por_id']], sprintf(" and opl_id=%d", $oplId));
		}
		else
		{
			$oplId = $res['data'][0];
			$res = $B2cBase->get('or_order_pay_list', ['opl_por_id'], sprintf(" and opl_id =%d", $oplId), true);
			$res = $LibYpApi->get('order/getPayPage', ['por_id'=>$res['data']['opl_por_id']]);
			$payArr = $res['data'];
		}
		if($PayBy == 'alipay' && $payType != 'app')
		{
			$payArr['por_return_data']['pay_form'] = base64_decode($payArr['por_return_data']['pay_form']);
		}
		LibFc::ajaxJsonEncode(['status'=>true, 'data'=>['opl_id'=>$oplId, 'pay'=>$payArr['por_return_data']]]);
	}

	/**
	  * @method 订单支付成功跳转页
	  * @author soul 2017/8/12
	  */
	function payOk()
	{	
		//是否登录
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin('gzhs');
		$Params = mvc::$URL_PARAMS;
		$oplId = (int) $Params['oplId'];
		$B2cBase = new B2cBase();
		$res = $B2cBase->get('or_order_pay_list', ['opl_por_id'], sprintf(" and opl_id =%d", $oplId), true);
		if(empty($res['data'])) LibTpl::Error('oplId不存在或者已被删除！', mvc::$cfg['SELF_URI'].'user/order?ordId='.implode(',', $ordIdArr));
		$LibYpApi = new LibYpApi();
		$res = $LibYpApi->get('order/checkPay', [], ['por_id'=>$res['data']['opl_por_id']]);
		$payArr = $res['data'];

		$res = $B2cBase->get('or_order_pay_list_link', ['opll_ord_id'], sprintf(" and opll_opl_id =%d order by opll_ord_id", $oplId));
		$ordIdArr = array_column($res['data'], 'opll_ord_id');

		if($payArr['por_status'] == 1)
		{
			$B2cOrder = new B2cOrder();
			$B2cOrder->payOkByoplId($oplId);
			LibTpl::Success('订单ID：'.implode(',', $ordIdArr).'支付成功！', mvc::$cfg['SELF_URI'].'user/order?ordId='.implode(',', $ordIdArr));
		}
		else
		{
			LibTpl::Error('订单ID：'.implode(',', $ordIdArr).'尚未完成支付，请稍后重试！', mvc::$cfg['SELF_URI'].'user/order?ordId='.implode(',', $ordIdArr));
		}
	}

	
	/**
	  * @method 删除用户收藏
	  * @author xu 2018/6/26
	  */
	function delColl()
	{
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin('gzhs');
		if(!empty($_SESSION['_userid']) && !empty($_POST['proId']) && LibFc::Int($_POST['proId']))
		{
			$B2cBase = new B2cBase();
			$B2cBase ->del("us_product_collection",sprintf("and prc_uid=%d and prc_pro_id=%d",$_SESSION['_userid'],$_POST['proId']));
		}
		LibFc::ajaxJsonEncode(['status'=>true, 'data'=>true]);
	}

	/**
	  * @method 删除用户浏览历史
	  * @author xu 2018/6/26
	  */
	function delHistory()
	{
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin('gzhs');
		$res=['status'=>false, 'data'=>'删除失败'];
		if(!empty($_POST['proId']))
		{
			$proArr=is_array($_POST['proId'])?array_filter($_POST['proId']):[(int)$_POST['proId']];
			$id = implode(',',$proArr);
			$B2cBase = new B2cBase();
			$res=$B2cBase ->del("us_product_history",sprintf("and prh_uid=%d and prh_pro_id in (%s)",$_SESSION['_userid'],$id));
		}else{
			$B2cBase = new B2cBase();
			$res = $B2cBase->get("us_product_history left join bc_product on pro_id=prh_pro_id ",['pro_id'],sprintf("and prh_uid=%d and pro_shop_id=%d",$_SESSION['_userid'],mvc::$cfg['SHOPID']));
			$proIds = array_column($res['data'], 'pro_id');
			if(!empty($proIds))
			{
				$res=$B2cBase->del("us_product_history",sprintf("and prh_uid=%d and prh_pro_id in (%s)",$_SESSION['_userid'],implode(",", $proIds)));
			}
		}
		LibFc::ajaxJsonEncode($res);
	}

	/**
	  * @method 收藏记录异步加载
	  * @author xu 2018/6/26
	  */
	function ajaxLoadColl()
	{
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin('gzhs');
		$Params = mvc::$URL_PARAMS;
		$B2cBase = new B2cBase();
		$B2cUser=new B2cUser();
		$res=$B2cUser->getUserMember($_SESSION['_userid'],mvc::$cfg['SHOPID']);
		$level=0;
		if(!empty($res['data']))
		{
			$level=$res['data']['mem_mel_id'];
		}
		$page = !empty($Params['page'])&&$Params['page']>0?(int)$Params['page']:1;
		$perPage = 10;
		$table = "us_product_collection left join bc_product on pro_id=prc_pro_id ";
		$where = sprintf("and prc_uid=%d and pro_shop_id=%d ",$_SESSION['_userid'],mvc::$cfg['SHOPID']);

		// 分类筛选
		if(!empty($Params['sort']) && LibFc::Int($Params['sort']))
			$where.=sprintf(' and pro_id in (select prs_pro_id from bc_product_sort where prs_sort_id=%d)',$Params['sort']);
		if(!empty($Params['depre']) && $Params['depre']==1)
			$where .= ' and (pro_status<1 or pro_count<1)';
		else
			$where .= ' and pro_status>0 and pro_count>0 ';

		// 数量
		$res = $B2cBase->get($table,['count(*) count'],$where,true);
		$totalPage=ceil($res['data']['count']/$perPage);
		$tpl='';	
		if($res['data']['count']>0)
		{
			$fieldArr=['prc_pro_id','pro_sale_price','pro_id','pro_name','prc_price','pro_promotion_price','pro_promotion_btime','pro_promotion_etime','pro_price_vip1','pro_price_vip2','pro_price_vip3','pro_price_vip4'];
			$where .= sprintf(" order by prc_add_time desc limit %d,%d", ($page-1)*$perPage, $perPage);
			$pro = $B2cBase->get('us_product_collection left join bc_product on pro_id=prc_pro_id', $fieldArr, $where);
			// print_r($pro);
			$B2cProduct = new B2cProduct();
			$res = $B2cProduct->getProductPic(array_column($pro['data'], 'prc_pro_id'));
			foreach ($pro['data'] as $k => $v)
			{
				$pro['data'][$k]['pic'] = empty($res['data'][$v['prc_pro_id']])?[]:current($res['data'][$v['prc_pro_id']]);
			}
			$pro = $pro['data'];

			foreach ($pro as $k => $v) {
				if(!empty($v['pro_promotion_price']) && $v['pro_promotion_price']<$v['pro_sale_price'] && time()>$v['pro_promotion_btime'] && time()<$v['pro_promotion_etime'])
				{
					$pro[$k]['price'] = $v['pro_promotion_price'];

				}else{
					$pro[$k]['price'] = $v['pro_sale_price'];
				}
				if($level>0&& $v['pro_price_vip'.$level] > 0 && $v['pro_price_vip'.$level] < $pro[$k]['price'])
				{
					$pro[$k]['price'] = $v['pro_price_vip'.$level];
				}
			}
			LibTpl::Set('data',$pro);
			$tpl = LibTpl::Fetch('user/ajaxLoadColl.php');
		}
		LibFc::ajaxJsonEncode(['status'=>true,'data'=>['totalPage'=>$totalPage,'tpl'=>$tpl]]);
	}

	/**
	 * @method    订单详情
	 * @author 卢
	 * @copyright 2018-07-19
	 */
	function detail()
	{
		//必须开通店铺
		$OthCheck = new OthCheck();
		$OthCheck->wxOpenId();
		$OthCheck->mustLogin('gzhs');
		$B2cOrder = new B2cOrder();
		$YpwAddr= new YpwAddr();
		$Params = mvc::$URL_PARAMS;
		if(!LibFc::Int($Params['orderId']))
		{
			LibTpl::Error('订单信息错误',mvc::$cfg['SELF_URI'].'user/order');
			exit();
		}
		$res=$B2cOrder->get('or_order',['count(*) count'],sprintf(' and ord_id=%d and ord_shop_id=%d and ord_uid=%d',$Params['orderId'],mvc::$cfg['SHOPID'],$_SESSION['_userid']),true);
		if(!$res['data']['count'])
		{
			LibTpl::Error('订单信息错误',mvc::$cfg['SELF_URI'].'user/order');
			exit();
		}
		//订单信息
		$orderRes=$B2cOrder->getOrderDetail($Params['orderId'],mvc::$cfg['SHOPID']);
		//获取自编码
		if($orderRes['data'])
		{
			$proIds = array_column($orderRes['data']['proArr'],'orp_pro_id');
			$numRes = $B2cOrder->get('bc_number',['*'],sprintf(" AND num_self =1 AND num_show=1 AND num_pro_id IN (%s)",implode(",",$proIds)));
			$numArr = array_column($numRes['data'],null,'num_pro_id');

			foreach ($orderRes['data']['proArr'] as &$val) {
				$val['selfnum'] = $numArr[$val['orp_pro_id']]?$numArr[$val['orp_pro_id']]['num_display']:'';
			}
			unset($val);
		}
		//获取运单
		$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']);
			// print_r($pro_ext);
			LibTpl::Set('ext',$pro_ext);
			LibTpl::Set('expInfo',$expInfo['data']);
		}	
		// print_r($orderRes['data']);
		//店铺信息
		$shopInfo=$B2cOrder->Get('sh_shop',['*'],sprintf(' and shop_id=%d',$orderRes['data']['ord_shop_id']),true);
		$addrInfo=$YpwAddr->getAddrByIds($shopInfo['data']['shop_pct_ids']);
		LibTpl::Set('addrInfo',implode('', $addrInfo['data']));
		LibTpl::Set('shopInfo',$shopInfo['data']);
		LibTpl::Set('orderInfo',$orderRes['data']);
		LibTpl::Set('bodyClass', 'order-des-page');
		LibTpl::Set('footMenu', 'user');
		LibTpl::Set('title', '订单详情');
		LibTpl::Put();
	}
	/**
	 * @method    物流信息
	 * @author 卢
	 * @copyright 2018-07-19
	 */
	function express()
	{
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin('gzhs');
		$B2cOrder = new B2cOrder();
		$Params = mvc::$URL_PARAMS;
		if(!LibFc::Int($Params['orderId']))
		{
			LibTpl::Error('订单信息错误',mvc::$cfg['SELF_URI'].'user/order');
			exit();
		}
		$res=$B2cOrder->get('or_order',['count(*) count'],sprintf(' and ord_id=%d and ord_shop_id=%d and ord_uid=%d',$Params['orderId'],mvc::$cfg['SHOPID'],$_SESSION['_userid']),true);
		if(!$res['data']['count'])
		{
			LibTpl::Error('订单信息错误',mvc::$cfg['SELF_URI'].'user/order');
			exit();
		}
		$orderRes=$B2cOrder->getOrderDetail($Params['orderId'],mvc::$cfg['SHOPID']);
		//获取运单
		$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']);
			// print_r($pro_ext);
			if(!empty($expInfo['data']))
			{
				foreach ($expInfo['data'] as $k => $v) 
				{
					if(!empty($v['ext_track']))
					{
						foreach ($v['ext_track'] as $i => $val) 
						{
							$expInfo['data'][$k]['trackLists'][date('m-d',$val['time'])][]=$val;
						}
					}
				}
				foreach ($expInfo['data'] as $k => $v) 
				{
					if(!empty($v['trackLists']))
					{

						foreach ($v['trackLists'] as $i => $val) 
						{
							$expInfo['data'][$k]['trackLists'][$i]=array_reverse($expInfo['data'][$k]['trackLists'][$i]);
						}
						$expInfo['data'][$k]['trackLists']=array_reverse($expInfo['data'][$k]['trackLists']);
					}
				}
			}
			LibTpl::Set('ext',$pro_ext);
			LibTpl::Set('expInfo',$expInfo['data']);
		}	
		// print_r($orderRes['data']);
		LibTpl::Set('orderInfo',$orderRes['data']);
		LibTpl::Set('footMenu', 'user');
		LibTpl::Set('title', '物流信息');
		LibTpl::Put();
	}
	/**
	 * @method    确认收货
	 * @author 卢
	 * @copyright 2017-08-29
	 */
	public function affirmOrder()
	{
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin('gzhs');
		$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 and ord_shop_id=%d',$Params['orderId'],$_SESSION['_userid'],mvc::$cfg['SHOPID']),true);
			if($re['data']['count'])
			{
				$res=$B2cOrder->orderCompleted($Params['orderId']);	
			}else{
				$res['data']='订单不属于该用户';
			}
		}
		LibFc::ajaxJsonEncode($res);
	}
		/**
	 * @method    ajax删除订单
	 * @author 卢
	 * @copyright 2017-08-10
	 */
	public function ajaxDelOrder()
	{
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin('gzhs');
		$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=!empty($_POST['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) and ord_shop_id=%d',$_SESSION['_userid'],implode(',', $orderArr),mvc::$cfg['SHOPID']));

			$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    评价
	 * @author 卢
	 * @copyright 2018-07-19
	 */
	function evaluate()
	{
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin('gzhs');
		$Params = mvc::$URL_PARAMS;
		$B2cOrder = new B2cOrder();
		if(LibFc::Int($Params['orderId']))
		{
			//检验订单是否已经完成
			$B2cComment = new B2cComment();
			$proId = LibFc::Int($Params['proId'])?$Params['proId']:0;
			$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);
			//订单已确认收货
			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('没有订单要评价');
				}
			}else
			{
				LibTpl::Error('没有订单要评价');
			}
			LibTpl::Set('footMenu', 'user');
			LibTpl::Set('title', '评价订单');
			LibTpl::Put();
			exit;
		}
		LibTpl::Error('订单错误');
	}
	/**
	 * @method    保存评价
	 * @author 卢
	 * @copyright 2018-07-19
	 */
	function saveEvaluate()
	{
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin('gzhs');
		$Params = mvc::$URL_PARAMS;
		$B2cOrder = new B2cOrder();
		if(!empty($_POST))
		{
			$B2cComment = new B2cComment();
			//店铺评分
			if(!empty($_POST['shopScore']))
			{
				$dataArr=[
					'ordId'=>(int)$_POST['ordId'],
					'shopId'=>(int)$_POST['shopId'],
					'service'=>(!empty($_POST['shopScore']['server'])?(int)$_POST['shopScore']['server']:5),
					'logistics'=>(!empty($_POST['shopScore']['express'])?(int)$_POST['shopScore']['express']:5),
					'courier'=>(!empty($_POST['shopScore']['send'])?(int)$_POST['shopScore']['send']:5),
					'incognito'=>(!empty($_POST['anonymous'])?'on':''),
					'orderall'=>'all'
				];
				$re = $B2cComment->saveComment($dataArr,$_SESSION['_userid']);
			}
			if(!empty($_POST['score']))
			{
				$orpArr=array_keys($_POST['score']);
				if(!empty($orpArr))
				{
					$res=$B2cComment->get('or_order_product',['orp_id','orp_pro_id'],sprintf(' and orp_id in(%s)',implode(',',$orpArr)));
					if(!empty($res['data']))
					{
						foreach ($res['data'] as $v) 
						{
							$dataArr=[];
							$dataArr=[
								'proAutoId'=>$v['orp_id'],
								'comscore'=>(!empty($_POST['score'][$v['orp_id']])?(int)$_POST['score'][$v['orp_id']]:5),
								'orderEval'=>(!empty($_POST['descrption'][$v['orp_id']])?$_POST['descrption'][$v['orp_id']]:''),
								'proId'=>$v['orp_pro_id'],
								'incognito'=>(!empty($_POST['anonymous'])?'on':''),
								'ordId'=>(int)$_POST['ordId'],
								'shopId'=>(int)$_POST['shopId'],
								'orderpro'=>'pro'
							];
							$re = $B2cComment->saveComment($dataArr,$_SESSION['_userid']);
						}
					}
				}
			}
			LibTpl::Success('订单'.$_POST['ordId'].'评价成功', mvc::$cfg['SELF_URI'].'user/order');

		}
		LibTpl::Error('订单错误');
	}
	/**
	 * @method    申请售后第一步
	 * @author 卢
	 * @copyright 2018-07-19
	 */
	function applyRefundStep1()
	{
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin('gzhs');
		$Params = mvc::$URL_PARAMS;
		$B2cBase = new B2cBase();
		if(!empty($Params['orpId']))
		{
			

			//新申请
			$orpId = (int) $Params['orpId'];
			//检测此配件订单是否存在
			$res = $B2cBase->get('or_order_product join or_order on orp_ord_id=ord_id ',['*'],sprintf(" and orp_id=%d and ord_uid=%d ", $orpId, $_SESSION['_userid']), true);
			$repArr = $res['data'];
			if(empty($repArr)) LibTpl::Error('订单不存在或者已被删除！', mvc::$cfg['SELF_URI'].'user/order');

			if(!empty($repArr))
			{
				//配件图片
				$B2cProduct = new B2cProduct;
				$res = $B2cProduct->getProductPic([$repArr['orp_pro_id']]);
				$res = isset($res['data'][$repArr['orp_pro_id']])?current($res['data'][$repArr['orp_pro_id']]):[];
				LibTpl::Set('proPicArr', $res);
				
			}
			LibTpl::Set('repArr',$repArr);
			// print_r($repArr);
			$B2cOrder = new B2cOrder();
			//检查此配件是否有未完成退款记录
			$res = $B2cOrder->getRefundMoney($Params['orpId']);
			$maxMoney=$res['data']['maxMoney'];
			$res = $B2cBase->get('or_refund_pact',['rep_id'],sprintf(" and rep_orp_id=%d", $orpId));
			if(!empty($res['data']))
			{
				foreach ($res['data'] as $v) 
				{
					if($maxMoney<0.01)
					{
						LibFc::Go( mvc::$cfg['SELF_URI'].'user/viewRefundByBuyer?repId='.$v['rep_id']);
					}
					if(in_array($v['rep_status'], ['wait ','confirm','refundpro','refuse']))
					{
						LibFc::Go( mvc::$cfg['SELF_URI'].'user/viewRefundByBuyer?repId='.$v['rep_id']);
					}
				}
			}
		}
		LibTpl::Set('footMenu', 'user');
		LibTpl::Set('title', '退款申请');
		LibTpl::Put();
	}
	/**
	 * @method    申请售后第二步
	 * @author 卢
	 * @copyright 2018-07-19
	 */
	function applyRefundStep2()
	{
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin('gzhs');
		$Params = mvc::$URL_PARAMS;
		$B2cBase = new B2cBase();
		$B2cOrder = new B2cOrder();
		$repId = 0;
		if(!empty($_POST['rep']) && !empty($_POST['rep']['rep_orp_id']))
		{
			// print_r($_POST);
			// die;

			$repArr = $_POST['rep'];
			$dataArr['rep_status'] =  'wait';
			if($repArr['rep_type'] == 2) $repArr['rep_money'] = 0.00;
			$repArr['rep_uid'] = $_SESSION['_userid'];
			if(!empty($repArr['rep_id']))
			{
				$dataArr['rep_apply_time'] = time();
				$res = $B2cOrder->setRefund($repArr['rep_id'], $repArr);
			}
			else
			{
				$res = $B2cOrder->addRefund($repArr);
			}

			LibFc::Go(mvc::$cfg['SELF_URI'].'user/viewRefundByBuyer?repId='.$res['data']);
		}
		if(!empty($Params['repId']))
		{
			//修改退款协议
			$res = $B2cBase->get('or_refund_pact join or_order on rep_ord_id=ord_id join or_order_product on orp_ord_id=ord_id',['*'],sprintf(" and rep_id=%d and ord_uid=%d ", $Params['repId'], $_SESSION['_userid']), true);
			if(empty($res['data'])) LibTpl::Error('退款ID：'.$Params['repId'].'不存在！', '/user/order');

			// 卖家同意退款、卖家已寄回货物、退款关闭、退款完成 =》 禁止重新提交退款申请
			if($res['data']['rep_status']=='confirm' || $res['data']['rep_status']=='refundpro' || $res['data']['rep_status']=='close'|| $res['data']['rep_status']=='refunded')
			{
				LibFc::Go(mvc::$cfg['SELF_URI'].'user/viewRefundByBuyer?repId='.$res['data']['rep_id']);
				exit;
			}

			$repArr = $res['data'];
			LibTpl::Set('repArr',$repArr);
			$type = 'edit';
			$style=$repArr['rep_type'];
			$repId = $repArr['rep_id'];
			$orpId = $repArr['rep_orp_id'];
		}
		elseif(!empty($Params['orpId']))
		{
			$type = 'apply';
			if(empty($Params['type']))
				LibFc::Go(mvc::$cfg['SELF_URI'].'user/applyRefundStep1?orpId='.$Params['orpId'].'&orderId='.$Params['orderId']);
			$style=(int)$Params['type']-1;
			$orpId = (int) $Params['orpId'];
			//检测此配件订单是否存在
			$res = $B2cBase->get('or_order_product join or_order on orp_ord_id=ord_id ',['*'],sprintf(" and orp_id=%d and ord_uid=%d ", $orpId, $_SESSION['_userid']), true);
			$repArr = $res['data'];
			if(empty($repArr)) LibTpl::Error('订单不存在或者已被删除！', mvc::$cfg['SELF_URI'].'/user/order');
			if(!empty($repArr))
			{
				//配件图片
				$B2cProduct = new B2cProduct;
				$res = $B2cProduct->getProductPic([$repArr['orp_pro_id']]);
				$res = isset($res['data'][$repArr['orp_pro_id']])?current($res['data'][$repArr['orp_pro_id']]):[];
				LibTpl::Set('proPicArr', $res);
				
			}
			LibTpl::Set('repArr',$repArr);
			// print_r($repArr);
			//检查此配件是否有未完成退款记录
			$res = $B2cBase->get('or_refund_pact',['rep_id'],sprintf(" and rep_orp_id=%d and rep_status in ('wait', 'confirm', 'refuse') limit 1", $orpId), true);
			if(!empty($res['data']))
				LibFc::Go(mvc::$cfg['SELF_URI'].'user/viewRefundByBuyer?repId='.$res['data']['rep_id']);
		}
		$res = $B2cOrder->getRefundMoney($orpId, $repId);
		// print_r($res);
		$maxMoney = $res['data'];
		LibTpl::Set('maxMoney',$maxMoney);
		LibTpl::Set('type',$type);
		$arr=[
			0=>[
				0=>['value'=>0,'text'=>'未收到货'],
				1=>['value'=>1,'text'=>'已收到货'],
			],
			1=>[
				0=>['value'=>1,'text'=>'已收到货'],
			],
			2=>[
				0=>['value'=>1,'text'=>'已收到货'],
			],
		];
		LibTpl::Set('typeArr',$arr[(int)$style]);
		$res = $B2cOrder->getRefundReason();
		$refundReason=$res['data'][(int)$style];
		foreach ($refundReason as $k=> $v) 
		{
			$refundReason[$k]=['value'=>$v,'text'=>$v];
		}
		// print_r($refundReason);
		LibTpl::Set('refundReason', $refundReason);
		LibTpl::Set('Params',$Params);
		LibTpl::Set('footMenu', 'user');
		LibTpl::Set('title', '退款申请');
		LibTpl::Put();
	}
	/**
	 * @method    查看售后内容
	 * @author 卢
	 * @copyright 2018-07-19
	 */
	function viewRefundByBuyer()
	{
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin('gzhs');
		$Params = mvc::$URL_PARAMS;
		$B2cBase = new B2cBase();
		$B2cOrder = new B2cOrder();
		if(isset($Params['repId']))
		{
			// 在applyrefund方法之中跳转过来
			if(!LibFc::Int($Params['repId'])) LibTpl::Error('参数错误！', mvc::$cfg['SELF_URI'].'user/order');
			// 校验退款单
			$where = sprintf(" and rep_id=%d and rep_uid=%d ",(int)$Params['repId'],$_SESSION['_userid']);
			$res=$B2cBase->get('or_refund_pact',['*'],$where,true);
			$repArr = $res['data'];
		}
		elseif(isset($Params['orpId']))
		{
			// 在订单列表之中跳转过来
			$orpId = (int) $Params['orpId'];
			$res = $B2cBase->get("or_refund_pact",['*'],sprintf(" and rep_orp_id=%d and rep_uid=%d and rep_status!='close' order by rep_apply_time desc ", $orpId, $_SESSION['_userid']), true);
			$repArr = $res['data'];
		}
		else
		{
			LibTpl::Error('参数错误！', mvc::$cfg['SELF_URI'].'user/order');
		}
		if(empty($repArr)) LibTpl::Error('退款申请记录：不存在！', mvc::$cfg['SELF_URI'].'user/order');

		// 调用接口校验
		$B2cOrder->checkRefund($repArr['rep_id']);

		// 获取当前配件订单信息
		$res = $B2cBase->get('or_order_product',['*'],sprintf(" and orp_id=%d ",$repArr['rep_orp_id']),true);
		LibTpl::Set('orderProductMsg',$res['data']);


		$repId = $repArr['rep_id'];
		//计算是否超时更新状态 
		$B2cOrder->autoRefundStatus($repId);
		
		// 获取该条售后申请相关数据
		$res = $B2cOrder->getRefundkMsg($repId);
		// print_r($res);
		// die;
		$repArr = $res['data'];
		LibTpl::Set('repArr',$repArr);

		// 如果有卖家退货地址
		if(!empty($repArr['rep_refund_addr'])) LibTpl::Set("sellerAddress",json_decode($repArr['rep_refund_addr'],true));
		
		// 如果有买家退回的物流信息
		if(!empty($repArr['rep_express_des'])) LibTpl::Set("buyerRepAddress",json_decode($repArr['rep_express_des'],true));
		//获取所有退款原因
		$res = $B2cOrder->getRefundType();
		LibTpl::Set('refundType',$res['data']);

		// 针对不同的状态计算不同的倒计时
		$res = $B2cOrder->getRemaintime($repArr);
		LibTpl::Set('hasHowmuchTime',$res['data']);

		// 将退款ID传递过去
		$Params['repId'] = $repId;
		LibTpl::Set('Params',$Params);
		LibTpl::Set('footMenu', 'user');
		LibTpl::Set('title', '退款申请');
		LibTpl::Put();
	}
	/**
	  * @method 买家主动取消售后服务申请
	  * @author xu 2017/10/30
	  */
	function cancleServiceApply()
	{
		// 检测登录状态
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin('gzhs');
		// 校验参数
		$rep_id = $_POST['rep_id'];

		if(!LibFc::Int($rep_id))
		{
			$msg = array('status'=>false,'data'=>'参数错误！');
			LibFc::ajaxJsonEncode($msg);
		}
		$B2cBase = new B2cBase();
		$B2cOrder = new B2cOrder();
		// 校验当前配件订单属于当前买家
		$res = $B2cBase->get(' or_refund_pact  ',['*'],sprintf(" and rep_id=%d and rep_uid=%d ",$rep_id,$_SESSION['_userid']),true);
		
		if(empty($res['data']))
		{
			$msg = array('status'=>false,'data'=>'参数错误！');
			LibFc::ajaxJsonEncode($msg);
		}
		// 校验当前配件订单状态不能是退款完成或者退款关闭的状态
		if($res['data']['rep_status'] == 'close' || $res['data']['rep_status'] == 'refunded')
		{
			$msg = array('status'=>false,'data'=>'参数错误！');
			LibFc::ajaxJsonEncode($msg);
		}
		// 调用接口撤销退款申请
		$res = $B2cOrder->closeRefund($rep_id);

		// 添加关闭日志记录
		// 调用接口增加退款日志
		$logArr = [
			'rel_rep_id'=>$rep_id,
			'rel_txt'=>'买家撤销售后服务申请！',
			'rel_atime'=>time(),
			'rel_utype'=>1
		];
		$B2cOrder = new B2cOrder();
		$B2cOrder->addRefundLog($logArr);


		if($res['status'])
		{
			$msg = array('status'=>true,'data'=>true);
			LibFc::ajaxJsonEncode($msg);
		}
		else
		{
			$msg = array('status'=>false,'data'=>'参数错误！');
			LibFc::ajaxJsonEncode($msg);
		}
	}
	/**
	 * @method    查看售后历史
	 * @author 卢
	 * @copyright 2018-07-19
	 */
	function viewRefundHistory()
	{
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin('gzhs');
		$Params = mvc::$URL_PARAMS;
		$B2cBase = new B2cBase();
		$B2cOrder = new B2cOrder();
		if(LibFc::Int($Params['repId']))
		{
			if(!LibFc::Int($Params['repId'])) LibTpl::Error('参数错误！', mvc::$cfg['SELF_URI'].'user/order');
			// 校验退款单
			$where = sprintf(" and rep_id=%d and rep_uid=%d ",(int)$Params['repId'],$_SESSION['_userid']);
			$res=$B2cBase->get('or_refund_pact',['*'],$where,true);
			$repArr = $res['data'];
			if(empty($repArr)) 
				LibTpl::Error('退款申请记录：不存在！', mvc::$cfg['SELF_URI'].'user/order');
			$repId = $repArr['rep_id'];
			// 获取该条售后申请相关数据
			$res = $B2cOrder->getRefundkMsg($repId);
			// print_r($res);
			// die;
			$repArr = $res['data'];
			LibTpl::Set('repArr',$repArr);
		}
		LibTpl::Set('footMenu', 'user');
		LibTpl::Set('title', '退款申请');
		LibTpl::Put();
	}
	/**
	 * @method    换货物流
	 * @author 卢
	 * @copyright 2018-07-19
	 */
	function addRefundExpress()
	{
		// 检测登录状态
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin('gzhs');
		$B2cProduct = new B2cProduct;
		$B2cBase = new B2cBase();
		$B2cOrder = new B2cOrder();
		$Params = mvc::$URL_PARAMS;
		LibTpl::Set('Params',$Params);
		// 校验当前的退款申记录ID
		$repId = $Params['repId'];
		if(!LibFc::Int($repId))
		{
			LibTpl::Error('参数错误！');
		}
		// 校验当前的退款记录必须是当前买家的
		$res = $B2cBase->get("or_refund_pact",['rep_id'],sprintf(" and rep_id=%d and rep_uid=%d and rep_status!='close' ",$repId,$_SESSION['_userid']),true);
		if(empty($res['data']))
		{
			LibTpl::Error('退款申请记录不存在！');
		}
		// // 获取当前退款记录的相关数据
		$res = $B2cOrder->getRefundkMsg($repId);
		$repArr = $res['data'];
		LibTpl::Set('repArr',$repArr);

		// // 获取所有退款类型
		// $res = $B2cOrder->getRefundType();
		// LibTpl::Set('refundType',$res['data']);
		// 获取所有快递公司名称用于用户填写寄回物流时候自动填充
		$B2cExpress = new B2cExpress();
		$res = $B2cExpress->getExpress();
		$res = $res['data'];
		$newRes = array();
		$i=0;
		foreach ($res as $key => $value) {
		 	$newRes[$i]=['value'=>$value['exp_code'],'text'=>$value['exp_name']];
		 	$i++;
		}
		// print_r($newRes);
		LibTpl::Set('allAddrCompanyJson',json_encode($newRes,JSON_UNESCAPED_UNICODE));
		LibTpl::Set('footMenu', 'user');
		LibTpl::Set('title', '填写退换物流');
		LibTpl::Put();
	}
	/**
	 * @method    退货物流入库
	 * @author 卢
	 * @copyright 2018-07-19
	 */
	public function submitReturnBackForm()
	{
		//必须已经登录
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin('gzhs');
		if($_POST['phone']=="" || $_POST['number']=="" || $_POST['company']=="")
		{
			LibTpl::Error('参数错误！');
		}
		$B2cBase = new B2cBase();
		$B2cOrder = new B2cOrder();

		// 校验当前的退款申记录ID
		$repId = $_POST['repId'];
		if(!LibFc::Int($repId))
		{
			LibTpl::Error('退款申请记录不存在！');
		}
		// 校验当前的退款记录必须是当前买家的
		$res = $B2cBase->get("or_refund_pact",['rep_id'],sprintf(" and rep_id=%d and rep_uid=%d and rep_status!='close' ",$repId,$_SESSION['_userid']),true);
		if(empty($res['data']))
		{
			LibTpl::Error('退款申请记录不存在！');
		}

		// 现在进行入库物流数据
		$rep_express_des = array(
			'instruc'=>urlencode(LibFc::Escape($_POST['instruc'])),
			'phone'=>(int)$_POST['phone'],
			'number'=>LibFc::Escape($_POST['number']),
			'company'=>urlencode(LibFc::Escape($_POST['company'])),
			'expcode'=>urlencode(LibFc::Escape($_POST['expcode']))
		);
		$dataArr = array(
			'rep_express_des'=>urldecode(json_encode($rep_express_des)),
			'rep_etime'=>time(),
			'rep_refund_pro_time'=>time(),
			'rep_status'=>'refundpro'
		);
		// 更新refund_pack表
		$res = $B2cBase->set(" or_refund_pact ",$dataArr,sprintf(" and rep_id=%d and rep_uid=%d and rep_status!='close' ",$repId,$_SESSION['_userid']));
		// 更新order_produt表
		$res = $B2cBase->get(" or_refund_pact ",['rep_orp_id'],sprintf(" and rep_id=%d and rep_uid=%d and rep_status!='close' ",$repId,$_SESSION['_userid']),true);
		$res = $res['data'];
		$res = $B2cBase->set(" or_order_product ",array('orp_refund_status'=>'refundpro'),sprintf(" and orp_id=%d ",$res['rep_orp_id']));
		// 记录日志信息
		$logArr = [
			'rel_rep_id'=>$repId,
			'rel_txt'=>'买家寄回配件，快递公司：'.LibFc::Escape($_POST['company']).'，物流单号：'.LibFc::Escape($_POST['number']).'，联系电话：'.(int)$_POST['phone'].'，退货说明：'.(LibFc::Escape($_POST['instruc'])?LibFc::Escape($_POST['instruc']):'无'),
			'rel_utype'=>1
		];
		$B2cOrder->addRefundLog($logArr);
		LibTpl::Success('退货物流保存成功',mvc::$cfg['SELF_URI'].'user/viewRefundByBuyer?repId='.$repId);
	}
	/**
	 * @method    获取退货物流
	 * @author 卢
	 * @copyright 2018-07-19
	 */
	function getRefundExpress()
	{
		//必须已经登录
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin('gzhs');
		$Params = mvc::$URL_PARAMS;
		$B2cExpress=new B2cExpress();
		if(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','orp_count'],sprintf('and rep_id=%d and rep_uid=%d and rep_type>0',$Params['repId'],$_SESSION['_userid']),true);
			if(!empty($res['data']))
			{
				// print_r($res);
				$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']]);
					if(!empty($resArr['data']))
					{
						if(!empty($resArr['data']['ext_track']))
						{
							foreach ($resArr['data']['ext_track'] as $i => $val) 
							{
								$resArr['data']['trackLists'][date('m-d',$val['time'])][]=$val;
							}
						}
					}
					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('footMenu', 'user');
		LibTpl::Set('title', '退换物流');
		LibTpl::Put();
	}
	/**
	 * @method    地址列表
	 * @author 卢
	 * @copyright 2018-07-19
	 */
	function address()
	{
		//必须已经登录
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin('gzhs');
		$Params = mvc::$URL_PARAMS;
		$B2cAddr= new B2cAddr();
		$YpwAddr= new YpwAddr();
		$userId=$_SESSION['_userid'];
		//地址列表
		$addrData=$B2cAddr->getMyListUser($userId);
		foreach ($addrData['data'] as $k => $v) 
		{
			$rootCity=array_slice(explode(',',$v['add_pct_ids']),0,2);
			$rootCity=array_filter($rootCity);
			$resArr=$YpwAddr->getAddrByIds(implode(',', $rootCity));
			$addrData['data'][$k]['BaseCity']=implode('', $resArr['data']);
		}
		// print_r($addrData['data']);
		LibTpl::Set('addrList',$addrData['data']);
		LibTpl::Set('footMenu', 'user');
		LibTpl::Set('title', '收货地址管理');
		LibTpl::Put();
	}
	/**
	 * @method    ajax获取省市区联动
	 * @author 卢
	 * @copyright 2018-07-19
	 */
	function getProvince(){
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin('gzhs');
		$Params = mvc::$URL_PARAMS;
		$pid=!empty($Params['id'])?(int)$Params['id']:0;
		$YpwBase = new YpwBase();
		$res = $YpwBase->get('yp_province_city', ['pc_id as value', 'pc_name as text'], sprintf(" and pc_pid=%d", $pid));
		LibFc::ajaxJsonEncode($res);
	}
	/**
	 *@method ajax添加地址
	 * @author 卢 2017/6/13
	 */
	function ajaxAddNewAddr()
	{
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin('gzh');
		$B2cBase = new B2cBase();
		$B2cAddr=new B2cAddr();
		$Uid=$_SESSION['_userid'];
		// LibFc::ajaxJsonEncode(array('status'=>true,'data'=>3019));
		// print_r($_POST);
		// die;
		if(!empty($_POST))
		{	
			$PathArr=$_POST['province'];
			foreach($PathArr as $k => $v)
			{
				if($v=='0')
				{
					unset($PathArr[$k]);
				}
			}
			$PathArr=array_filter($PathArr);
			$Path=implode(',' , $PathArr);
			$Target=array(
				'add_uid'=>$Uid,
				'add_name'=>$_POST['name'],
				'add_pct_ids'=>$Path,
				'add_address'=>$_POST['detail_addr'],
				'add_tel'=>$_POST['tel'],
				'add_alias'=>$_POST['byname']
				);

			$Target['add_default']= !empty($_POST['default'])? 1:0;
			if(empty($_POST['addid']))
			{

				$re=$B2cAddr->checkUserUniqueAddr($Target);
				if(!$re['data'])
				{
					LibFc::ajaxJsonEncode($re);
					exit;
				}
				else
				{
					$Id =$B2cBase->add('us_address',$Target);
					$Target['add_id']=$Id['data'];
					$Insertid=$Id['data'];
				}
			}
			else
			{

				$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(!empty($_POST['default'])&&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('gzh');
		$B2cBase = new B2cBase();
		$YpwAddr= new YpwAddr();

		$Uid = $_SESSION['_userid'];
		$Params = mvc::$URL_PARAMS;
		$id = isset($Params['id']) ? (int) $Params['id']: null;
		if($id)
		{	
			$res=$B2cBase->get('us_address',['*'],' and add_id='.$id.' and add_uid='.$Uid,true);
			if(!empty($res))
			{
				$resArr=$YpwAddr->getAddrByIds($res['data']['add_pct_ids']);
				$res['data']['pathName']=implode('',$resArr['data']);
			}
			// print_r($res);
		}
		LibFc::ajaxJsonEncode($res);
		exit;
	}
	/**
	 * @method    ajax获取地址列表
	 * @author 卢
	 * @copyright 2018-07-19
	 */
	function getAddress()
	{
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin('gzh');
		$B2cAddr= new B2cAddr();
		$YpwAddr= new YpwAddr();
		$userId=$_SESSION['_userid'];
		//地址列表
		$addrData=$B2cAddr->getMyListUser($userId);
		foreach ($addrData['data'] as $k => $v) 
		{
			$rootCity=array_slice(explode(',',$v['add_pct_ids']),0,2);
			$resArr=$YpwAddr->getAddrByIds(implode(',', $rootCity));
			$addrData['data'][$k]['BaseCity']=implode('', $resArr['data']);
		}
		LibFc::ajaxJsonEncode($addrData);
	}
	/**
	  * @method 删除地址
	  * @author 卢 2017/6/7
	  */
	function addressDelete()
	{		
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin('gzh');
		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::ajaxJsonEncode(['status'=>true,'data'=>true]);
		}
		LibFc::ajaxJsonEncode(['status'=>false,'data'=>'参数不正确']);
	}
	/**
	 * @method    个人信息
	 * @author 卢
	 * @copyright 2018-07-10
	 */
	function info()
	{
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin('gzh');
		$YpwUser = new YpwUser();
		$YpwAddr = new YpwAddr();
		$FieldArr = array('u_nickname','u_real_name','u_logo','ui_sex','ui_company','u_pct_ids');
		$res = $YpwUser->getUser($FieldArr, ' and u_id='.$_SESSION['_userid'], true);
		$res['data']['ui_area'] = '';
		if($res['data']['u_pct_ids']){
			$resArr=$YpwAddr->getAddrByIds($res['data']['u_pct_ids']);
			$res['data']['ui_area']=implode('',$resArr['data']);
			//封装一个前端需要的数组
			$pctIdArr =	explode(',', $res['data']['u_pct_ids']);
			$pctIdArr =	array_slice($pctIdArr,0,3);
			$selected  = count($pctIdArr)-1;
			$areaArr =[];
			$arr =['province','city','region'];
			$pctIdArr = array_pad($pctIdArr,3,0);
			foreach ($pctIdArr as $key => $pct_id) {
				//父id
				$ppct_id =0;
				if($key>=1){
					$ppct_id = $pctIdArr[$key-1];
				}
				$areaArr[]  = ['type'=>$arr[$key],'ppct_id'=>$ppct_id,'pct_id'=>$pct_id,'name'=>$resArr['data'][$pct_id]??'','selected'=>$key==$selected?1:0];
			}
			$res['data']['areaArr'] = $areaArr;
		}
		// var_dump($res['data']['areaArr']);die;
		LibTpl::Set('infoArr',$res['data']);
		LibTpl::Set('footMenu', 'user');
		LibTpl::Set('title', '个人信息');
		LibTpl::Put();
	}
	/**
	 * @method    个人信息保存
	 * @author 卢
	 * @copyright 2018-07-10
	 */
	function saveInfo()
	{
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin('gzh');
		$YpwUser = new YpwUser();
		$Params = mvc::$URL_PARAMS;
		$res=['data'=>'参数不正确','status'=>false];
		if(!empty($Params['type']))
		{
			switch ($Params['type']) 
			{
				case 'logo':
					if(!empty($_POST['logo']))
					{
						// $logoInfo = $YpwUser->Get('yp_user', array('u_logo'), ' and u_id='.$_SESSION['_userid'], true);
						$dataArr = [
							'u_logo'=>$_POST['logo'],
						];
						
						//数据库存储成功之后 删除原来文件中心的旧图片 如果原来数据库为空的 不执行删除
						// if($res['status'] && $res['data']>0 && !empty($logoInfo['data']['u_logo']))
						// {
						// 	$delLogoArr = ['cate'=>'yp_logo', 'files'=>$logoInfo['data']['u_logo']];
						// 	$OthFileCenter = new OthFileCenter();
						// 	$res = $OthFileCenter->del($delLogoArr,'yp');
						// }
					}
					break;
				case 'realname':
					if(!empty($_POST['realname']))
					{
						if(mb_strlen($_POST['realname'])>32)
						{
							$res['data']= '真实姓名过长';
							break;
						}
						$dataArr = [
							'u_real_name'=>$_POST['realname'],
						];
					}
				break;
				case 'nickname':
					if(!empty($_POST['nickname']))
					{
						if(mb_strlen($_POST['nickname'])>32)
						{
							$res['data']= '昵称过长';
							break;
						}
						$dataArr = [
							'u_nickname'=>$_POST['nickname'],
						];
					}
				break;
				case 'sex':
					if(isset($_POST['sex']))
					{
						$dataArr = [
							'ui_sex'=>(int)$_POST['sex'],
						];
					}
				break;
				case 'qq':
					if(isset($_POST['qq']))
					{
						if(!preg_match('/^[1-9][0-9]{4,15}$/', $_POST['qq']))
						{
							$res['data']= 'QQ格式不正确';
							break;
						}
						$dataArr = [
							'ui_qq'=>(int)$_POST['qq'],
						];
					}
				break;
				case 'work':
					if(!empty($_POST['work']))
					{
						if(mb_strlen($_POST['work'])>32)
						{
							$res['data']= '职业名称过长';
							break;
						}
						$dataArr = [
							'ui_work'=>$_POST['work'],
						];
					}
				break;
				case 'company':
					if(!empty($_POST['company']))
					{
						if(mb_strlen($_POST['company'])>32)
						{
							$res['data']= '公司名称过长';
							break;
						}
						$dataArr = [
							'ui_company'=>$_POST['company'],
						];
					}
				break;
				case 'area':
					if(!empty($_POST['area_key']))
					{
						$dataArr = [
							'u_pct_ids'=>$_POST['area_key'],
						];
					}
				break;
			}
			if(!empty($dataArr))
			{
				$res = $YpwUser->setUser($_SESSION['_userid'],$dataArr);
			}
		}
		LibFc::ajaxJsonEncode($res);
	}
	/*
	绑定手机号码
	 */
	function bindMobile()
	{
		$OthCheck = new OthCheck();
		$OthCheck->mustLogin('gzh');
		if(!empty($_POST['mobile']) && !empty($_POST['mobile_code']) && isset($_POST['imgcode']))
		{
			if($_SESSION['imgcode'] != strtoupper($_POST['imgcode']))
			{
				LibTpl::Error('图片验证码不正确',mvc::$cfg['SELF_URI'].'user/index');
			}
			else
			{
				$LibYpApi = new LibYpApi();
				$Mobile = trim($_POST['mobile']);
				$dataArr = [
					'mobile'=>$_POST['mobile'],	
					'style'=>'bind',
					'from'=>'PJDSGZH',
					'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'=>'PJDSGZH',
				];
				$LibYpApi->Get('sms/outMobileCode', $dataArr, [], true);
				$_SESSION['_mobliechk'] = 'Y';
				unset($_SESSION['imgcode']);
				LibTpl::Success('手机绑定成功',mvc::$cfg['SELF_URI'].'user/index');
			}
		}
		LibTpl::Set('footMenu', 'user');
		LibTpl::Set('title', '手机绑定');
		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);
	}
	/**
	  * @method 匹配验证码
	  * @author soul
	  * @copyright 2017/5/9
	  */
	function checkImgcode()
	{
		$Return = ['status'=>false, 'data'=>'验证码不正确', 'code'=>'code_error'];
		if($_SESSION['imgcode'] == strtoupper($_POST['val']))
		{
			$Return = ['status'=>true, 'data'=>'', 'code'=>''];
		}
		LibFc::ajaxJsonEncode($Return);
	}
	/**
	  * @method 短信验证码匹配
	  * @author soul
	  * @copyright 2017/5/9
	  */
	function checkMobilecode()
	{
		$Return = ['status'=>false, 'data'=>'短信校验码不正确', 'code'=>'code_error'];
		if(!empty($_POST['mobile']) && preg_match('/^1\d{10}$/', trim($_POST['mobile'])) && !empty($_POST['code']) && preg_match('/^\d{6}$/', trim($_POST['code'])))
		{
			$LibYpApi = new LibYpApi();
			$dataArr = [
				'mobile'=>$_POST['mobile'],	
				'style'=>$_POST['act'],
				'from'=>'PJDSGZH',
				'code'=>$_POST['code'],
			];
			$Res = $LibYpApi->Get('sms/checkMobileCode', $dataArr, [], true);
			if($Res['status'])
			{
				$Return = ['status'=>true, 'data'=>true, 'code'=>''];
			}
		}
		LibFc::ajaxJsonEncode($Return);
	}
	function searchHistory(){
		LibTpl::Set('footMenu', 'user');
		LibTpl::Set('title', '查询历史');
		LibTpl::Put();
	}


	/**
	  * @method 保存纠错信息
	  * @author soul
	  * @copyright 2019/6/5
	  */
	function addJiuCuo()
	{		
		if($_SESSION['imgcode'] != strtoupper($_POST['imgcode']))
			LibFc::ajaxJsonEncode(['status'=>false, 'data'=>'图片验证码不正确', 'code'=>'code_error']);

		if(!empty($_POST['jc_txt']))
		{
			$addArr = [
				'jc_shop_id'=>mvc::$cfg['SHOPID'],
				'jc_uid'=> (int) $_SESSION['_userid'],
				'jc_txt'=> $_POST['jc_txt'],
				'jc_atime'=>time(),
                'jc_url' => $_POST['url'],
                'jc_imgs' => $_POST['imgUrl'],
			];

            if(isset($_POST['jc_pro_id']))
            {
                $addArr ['jc_pro_id'] = (int) $_POST['jc_pro_id'];
                $addArr['jc_type'] = 'item';
            } else if(isset($_POST['keyword'])){
                $addArr['jc_vin'] = $_POST['keyword'];
                $addArr['jc_type'] = 'vin';
            }else{
                $addArr['jc_type'] = 'index';
            }
			unset($_SESSION['imgcode']);
			$OthBase = new OthBase();
			$res = $OthBase->get('ot_jiucuo',['jc_id'], sprintf(" and jc_shop_id=%d and jc_pro_id=%d and jc_txt='%s' limit 1", mvc::$cfg['SHOPID'], $addArr['jc_pro_id'], LibFc::Escape($addArr['jc_txt'])), true);
			if(!empty($res['data']))
				LibFc::ajaxJsonEncode(['status'=>true,'data'=>$res['data']['jc_id']]);
			$res = $OthBase->add('ot_jiucuo', $addArr);
			LibFc::ajaxJsonEncode($res);
		}
		LibFc::ajaxJsonEncode(['status'=>false,'data'=>'纠错内容不能为空']);
	}

	/**
	 * @method 微信解绑
	 * @author zhengweihua 
	 * @copyright 2023-07-29
	 */
	function ajaxUnBindWeixin()
	{
		$Return = ['status'=>false,'data'=>'参数错误'];

		if(!empty($_SESSION['_userid']))
		{
			$LibYpApi = new LibYpApi();
			$PostArr = [
				'uid'=>$_SESSION['_userid'],
				'data'=>['weixin'=>['bind'=>'N', 'u_weixin_unionid'=>'', 'u_weixin_info'=>[]]],
				'lang'=>'cn'
			];
			$res = $LibYpApi->Get('user/bind_account', [], $PostArr);
			$Return = $res;
		}
		LibFc::ajaxJsonEncode($Return);
	}
}