<?php
/*
===========================注册模块控制器
*/
class cls_tab_sys_account extends cls_base_table
{
	private $perms;
	//构造函数
	function __construct()
	{
		parent::__construct();
		global $obj_db;
		$this->obj_db=$obj_db;
		$this->perms["score_type"]=array("后台修改"=>1,"金币兑换"=>2,"每日登录"=>3,"连续登录奖励"=>4,"兑换金币"=>-1);
		$this->perms["gold_type"]=array("充值"=>1,"后台修改"=>2,"积分兑换"=>3,"兑换积分"=>-1,"购买vip"=>-2);
		$this->perms["gold_rate"]=1/1;//充值人民币转换成金币的比率
	}
	function __get($name){
		if(isset($this->perms["$name"])){
			return $this->perms["$name"];
		}
	}
	function __set($name,$value){
		if(isset($this->perms["$name"])){
			$this->perms["$name"]=$value;
		}else{
		}
	}
	//支付成功
	function on_pay($msg_uid,$msg_money,$msg_from_id=0){
		$arr_return=array("err"=>"","errid"=>0);
		if(!isset($msg_money)){
			$arr_return["err"]="金币不能为空！";
			return $arr_return;
		}
		$msg_money=$msg_money*$this->perms["gold_rate"];
		$arr_return=self::on_save_gold($msg_uid,$msg_money,1,$msg_from_id);
		return $arr_return;
	}
	//增加金币
	//msg_type:1充值
	//返回值：errid: 101程序出错,1金币余额不足
	function on_save_gold($msg_uid,$msg_money,$msg_type,$msg_from_id=0,$msg_beta=""){
		global $obj_db;
		$arr_return=array("err"=>"","errid"=>0);
		if(empty($msg_uid)){
			$arr_return["err"]="用户id不存在";
			return $arr_return;
		}
		if(empty($msg_money)){
			$arr_return["err"]="金币不能为零";
			return $arr_return;
		}
		$str_where=" where account_user_id=".$msg_uid;
		if($msg_money>0){
			$str_field="account_gold";
		}else{
			$str_field="account_gold_use";
			global $obj_ctl_user;
			if($obj_ctl_user->get_gold()<abs($msg_money)){
				$arr_return["err"]="金币余额不足";
				$arr_return["errid"]=1;//
				return $arr_return;
			}
		}
		$str_msg=$obj_db->execute("update ".DB_PRE."sys_account set ".$str_field."=".$str_field."+".$msg_money.$str_where);
		if($str_msg!=""){
			$arr_return["err"]=$str_msg;
			$arr_return["errid"]=101;//
			return $arr_return;
		}
		if($obj_db->affected_rows()<1){
			$arr_account_fields=array(
				"account_user_id"=>$msg_uid,
				$str_field=>$msg_money
			);
			$arr_return=parent::on_insert(DB_PRE."sys_account",$arr_account_fields);
			if($arr_return["err"]!=""){
				$arr_return["err"]=$arr_return["err"];
				$arr_return["errid"]=101;//
				return $arr_return;
			}
		}
		if(empty($msg_beta)) $msg_beta=array_search($msg_type,$this->perms["gold_type"]);
		$arr_fields=array(
			"gold_user_id"=>$msg_uid,
			"gold_type"=>$msg_type,
			"gold_val"=>$msg_money,
			"gold_from_id"=>$msg_from_id,
			"gold_addtime"=>TIME,
			"gold_beta"=>$msg_beta
		);
		$arr_return=parent::on_insert(DB_PRE."sys_account_gold",$arr_fields);
		/*
		if($arr_return["err"]==""){
		}else{
			$arr_return["err"]="保存时出错";
		}*/
		return $arr_return;
	}
	//增加积分
	//msg_type:1充值
	//返回值：errid: 101程序出错,1金币余额不足
	function on_save_score($msg_uid,$msg_score,$msg_type,$msg_from_id=0,$msg_beta=""){
		global $obj_db;
		$arr_return=array("err"=>"","errid"=>0);
		if(empty($msg_uid)){
			$arr_return["err"]="用户id不存在";
			return $arr_return;
		}
		if(empty($msg_score)){
			$arr_return["err"]="积分不能为零";
			return $arr_return;
		}
		$str_where=" where account_user_id=".$msg_uid;
		if($msg_score>0){
			$str_field="account_score";
		}else{
			$str_field="account_score_use";
			global $obj_ctl_user;
			if($obj_ctl_user->get_score()<abs($msg_score)){
				$arr_return["err"]="积分余额不足";
				$arr_return["errid"]=1;//
				return $arr_return;
			}
		}
		$str_msg=$obj_db->execute("update ".DB_PRE."sys_account set ".$str_field."=".$str_field."+".$msg_score.$str_where);
		if($str_msg!=""){
			$arr_return["err"]=$str_msg;
			$arr_return["errid"]=101;//
			return $arr_return;
		}
		if($obj_db->affected_rows()<1){
			$arr_account_fields=array(
				"account_user_id"=>$msg_uid,
				$str_field=>$msg_score
			);
			$arr_return=parent::on_insert(DB_PRE."sys_account",$arr_account_fields);
			if($arr_return["err"]!=""){
				$arr_return["err"]=$arr_return["err"];
				$arr_return["errid"]=101;//
				return $arr_return;
			}
		}
		if(empty($msg_beta)) $msg_beta=array_search($msg_type,$this->perms["score_type"]);
		$arr_fields=array(
			"score_user_id"=>$msg_uid,
			"score_type"=>$msg_type,
			"score_val"=>$msg_score,
			"score_from_id"=>$msg_from_id,
			"score_addtime"=>TIME,
			"score_beta"=>$msg_beta
		);
		$arr_return=parent::on_insert(DB_PRE."sys_account_score",$arr_fields);
		/*
		if($arr_return["err"]==""){
		}else{
			$arr_return["err"]="保存时出错";
		}*/
		return $arr_return;
	}
	/*金币兑换积分
		errid:0=成功,1=金币不足,2=未设置兑换比例，101=兑换失败，系统错误
	*/
	function on_exchange_gold($msg_uid,$msg_gold){
		global $obj_tab_sys_config,$obj_db;
		$arr_return=array("errid"=>0,"err"=>"成功兑换");
		if($obj_tab_sys_config->get_val("pay","exchange_rate")!=""){
			$lng_score=$msg_gold*(int)$obj_tab_sys_config->get_val("pay","exchange_rate");
		}else{
			$arr_return["err"]="后台未设置兑换比例";
			$arr_return["errid"]=2;
			return $arr_return;
		}
		//是否限制兑换频率
		$lng_day_limit=(int)$obj_tab_sys_config->get_val("pay","exchange_day_limit");
		if($lng_day_limit>0){
			$obj_rs=$obj_db->get_one("select count(1) as num from ".DB_PRE."sys_account_gold where gold_user_id=".$msg_uid." and gold_type=-1");
			if($obj_rs["num"]>=$lng_day_limit){
				$arr_return["errid"]=101;
				$arr_return["err"]="当天兑换过于频繁，系统锁定，明天再来兑换";
				return $arr_return;
			}
		}
		$obj_db->begin("exchange");//开始事务
		$arr_msg=self::on_save_gold($msg_uid,-$msg_gold,-1);
		if($arr_msg["err"]!=""){
			$arr_return["err"]=$arr_msg["err"];
			$arr_return["errid"]=1;
			$obj_db->rollback("exchange");//中断事务
			return $arr_return;
		}
		$arr_msg=self::on_save_score($msg_uid,$lng_score,2);
		if($arr_msg["err"]==""){
			$obj_db->commit("exchange");//完成事务
		}else{
			$obj_db->rollback("exchange");//中断事务
			$arr_return["errid"]=101;
			$arr_return["err"]=$arr_msg["err"];
			return $arr_return;
		}
		return $arr_return;
	}
	/*积分兑换金币
		errid:0=成功,1=积分不足,2=未设置兑换比例，101=兑换失败，系统错误
	*/
	function on_exchange_score($msg_uid,$msg_score){
		global $obj_tab_sys_config,$obj_db;
		$arr_return=array("errid"=>0,"err"=>"成功兑换");
		if($obj_tab_sys_config->get_val("pay","exchange_rate")!=""){
			$lng_rate=(int)$obj_tab_sys_config->get_val("pay","exchange_rate");
			$lng_gold=intval($msg_score/$lng_rate);
			$msg_score=$lng_gold*$lng_rate;
		}else{
			$arr_return["err"]="后台未设置兑换比例";
			$arr_return["errid"]=2;
			return $arr_return;
		}
		//是否限制兑换频率
		$lng_day_limit=(int)$obj_tab_sys_config->get_val("pay","exchange_day_limit");
		if($lng_day_limit>0){
			$obj_rs=$obj_db->get_one("select count(1) as num from ".DB_PRE."sys_account_score where score_user_id=".$msg_uid." and score_type=-1");
			if($obj_rs["num"]>=$lng_day_limit){
				$arr_return["errid"]=101;
				$arr_return["err"]="当天兑换过于频繁，系统锁定，明天再来兑换";
				return $arr_return;
			}
		}
		$obj_db->begin("exchange");//开始事务
		$arr_msg=self::on_save_score($msg_uid,-$msg_score,-1);
		if($arr_msg["err"]!=""){
			$arr_return["err"]=$arr_msg["err"];
			$arr_return["errid"]=1;
			$obj_db->rollback("exchange");//中断事务
			return $arr_return;
		}
		$arr_msg=self::on_save_gold($msg_uid,$lng_gold,3);
		if($arr_msg["err"]==""){
			$obj_db->commit("exchange");//完成事务
		}else{
			$obj_db->rollback("exchange");//中断事务
			$arr_return["errid"]=101;
			$arr_return["err"]=$arr_msg["err"];
			return $arr_return;
		}
		return $arr_return;
	}

}
?>
