| 
					
				 | 
			
			
				@@ -22,6 +22,12 @@ class Core 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		if (isset($action['id']) && $action['id'] > 0) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			$insert = array();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			$parent_uid = 0;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if (strstr($uid, '_')) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				$temp = explode('_', $uid);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				$uid = $temp[1];
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				$parent_uid = $temp[0];
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			$insert['uid'] = $uid;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			$insert['action_id'] = $action['id'];
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			$insert['callback'] = $callback;
 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -31,9 +37,14 @@ class Core 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			if ($num > 0) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				$insert['num'] = $num;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if ($parent_uid > 0) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				$insert['parent_uid'] = $parent_uid;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			$insert['cron_type'] = 1;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			$log_id = Dever::db('score/action_log')->insert($insert);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			Dever::load('score/lib/core.oper?log_id='.$log_id);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			return;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			$sync = Dever::config('base', 'score')->sync;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			if ($sync) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				Dever::daemon('lib/core.oper?log_id='.$log_id, 'score');
 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -83,46 +94,31 @@ class Core 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			$info['num'] = $info['num'] * $log['num'];
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		if ($info['num'] == 0) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			Dever::db('score/action_log')->update(array('where_id' => $log['id'], 'cron_type' => 3));
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			return;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			# 未加数据
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			return $this->finish($log);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		$uid = $log['uid'];
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		$user = Dever::db('score/user')->one(array('uid' => $uid, 'config_id' => $info['config_id']));
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (!$user) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			$user = array();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			$user['id'] = Dever::db('score/user')->insert(array('uid' => $uid, 'config_id' => $info['config_id'], 'score' => 0, 'no_score' => 0));
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			$user['score'] = 0;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		$num = $info['num'];
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		if ($info['upper'] == 2 && $info['upper_limit'] >= 1) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			$upper = $this->upper($uid, $info, $log);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			if (!$upper) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				Dever::db('score/action_log')->update(array('where_id' => $log['id'], 'score_type' => 3, 'cron_type' => 3, 'score' => '0'));
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				return;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				# 达到积分上限
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				return $this->finish($log, 3, '0');
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		Dever::db('score/action_log')->update(array('where_id' => $log['id'], 'score_type' => 2, 'cron_type' => 3, 'score' => $num));
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		$update = array();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		$update['where_id'] = $user['id'];
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		$update['score'] = $user['score'] + $num;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		# 完成
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		$this->finish($log, 2, $num);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		$insert['uid'] = $uid;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		$insert['config_id'] = $info['config_id'];
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		$insert['action_log_id'] = $log['id'];
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		$insert['action_id'] = $info['action_id'];
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		$insert['status'] = 1;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		$insert['num'] = $num;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		$insert['total'] = $update['score'];
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		$insert['cdate'] = time();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		$user_log_id = Dever::db('score/user_log')->insert($insert);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		$user_log_id = $this->add($uid, $num, $info['config_id'], $info['action_id'], $log['id']);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		Dever::db('score/user')->update($update);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		# 增加返利
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if ($info['rebate_type'] > 1) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			$this->rebate($uid, $num, $info, $log);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		# 提升等级
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		$level_type = Dever::db('score/level_type')->state();
 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -141,6 +137,108 @@ class Core 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	# 增加积分
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	private function add($uid, $num, $config_id, $action_id, $log_id, $rebate_uid = false)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	{
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		$user = Dever::db('score/user')->one(array('uid' => $uid, 'config_id' => $config_id));
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if (!$user) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			$user = array();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			$user['id'] = Dever::db('score/user')->insert(array('uid' => $uid, 'config_id' => $config_id, 'score' => 0, 'no_score' => 0));
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			$user['score'] = 0;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		$update = array();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		$update['where_id'] = $user['id'];
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		$update['score'] = $user['score'] + $num;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		$insert['uid'] = $uid;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		$insert['config_id'] = $config_id;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		$insert['action_log_id'] = $log_id;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		$insert['action_id'] = $action_id;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if ($rebate_uid) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			$insert['rebate_uid'] = $rebate_uid;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		$insert['status'] = 1;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		$insert['num'] = $num;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		$insert['total'] = $update['score'];
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		$insert['cdate'] = time();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		$user_log_id = Dever::db('score/user_log')->insert($insert);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		Dever::db('score/user')->update($update);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return $user_log_id;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	# 返利
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	private function rebate($uid, $num, $info, $log)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	{
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if (!strstr($info['rebate_value'], ':')) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			$info['rebate_value'] = '1:' . $info['rebate_value'];
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		$temp = explode(',', $info['rebate_value']);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		$invite = Dever::project('invite');
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		$parent_uid = false;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		foreach ($temp as $k => $v) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			$config = explode(':', $v);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			$value = $config[1];
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if ($info['rebate_type'] == 2) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				# 百分比
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				$value = round($num*($value/100), 2);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			# 直属上级
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if ($config[0] == 1) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if ($log['parent_uid'] > 0) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					$parent_uid = $log['parent_uid'];
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} elseif ($invite) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					$parent_uid = Dever::load('invite/api')->getParent($uid, $config[0]);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if ($parent_uid > 0) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					$this->add($parent_uid, $value, $info['config_id'], $info['action_id'], $log['id'], $uid);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} elseif ($invite) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				# 上级的上级
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if ($parent_uid > 0) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					$rebate_uid = $parent_uid;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					$level = $config[0]-1;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} else {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					$rebate_uid = $uid;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					$level = $config[0];
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				$other_parent_uid = Dever::load('invite/api')->getParent($rebate_uid, $level);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if ($other_parent_uid > 0) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					$this->add($other_parent_uid, $value, $info['config_id'], $info['action_id'], $log['id'], $rebate_uid);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	# 迁移完成的数据
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	private function finish($log, $score_type = 1, $score = 'no')
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	{
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		$id = $log['id'];
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if ($score_type == -1) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			Dever::db('score/action_log')->update(array('where_id' => $id, 'cron_type' => 3));
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} else {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			unset($log['id']);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			$log['log_id'] = $id;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			$log['cron_type'] = 3;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			$log['score_type'] = $score_type;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if ($score != 'no') {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				$log['score'] = $score;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			Dever::db('score/action_log_finish')->insert($log);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			Dever::db('score/action_log')->delete($id);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return true;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	# 设置上限限制
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	private function upper($uid, $info)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	{
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		# 有上限限制
 
			 |