rabin hace 6 años
padre
commit
f7fcb33c62
Se han modificado 6 ficheros con 144 adiciones y 16 borrados
  1. 31 0
      database/level.php
  2. 20 1
      database/level_type.php
  3. 1 1
      database/user.php
  4. 38 2
      database/user_level.php
  5. 39 10
      lib/Core.php
  6. 15 2
      lib/Level.php

+ 31 - 0
database/level.php

@@ -22,6 +22,12 @@ $type_id = function()
     return $array;
 };
 
+$total_type = array
+(
+    1 => '限制总数',
+    2 => '不限制',
+);
+
 return array
 (
     # 表名
@@ -118,6 +124,31 @@ return array
             'edit'      => true,
         ),
 
+        'total_type'       => array
+        (
+            'type'      => 'tinyint-1',
+            'name'      => '是否限制当前级别的总数-如果限制,请填写限制的总数,升级的用户数不能超过该数量',
+            'default'   => '2',
+            'desc'      => '是否限制当前级别的总数',
+            'match'     => 'is_numeric',
+            'update'    => 'select',
+            'option'    => $total_type,
+            'search'    => 'select',
+            'control'   => 'total_type',
+        ),
+
+        'total'       => array
+        (
+            'type'      => 'int-11',
+            'name'      => '限制总数',
+            'default'   => '0',
+            'desc'      => '限制总数',
+            'match'     => 'option',
+            'update'    => 'text',
+            'show'      => 'total_type=1',
+
+        ),
+
         'state'     => array
         (
             'type'      => 'tinyint-1',

+ 20 - 1
database/level_type.php

@@ -1,12 +1,17 @@
 <?php
 
-
 $type = array
 (
 	1 => '自动升级',
 	2 => '手动升级',
 );
 
+$score = array
+(
+	1 => '不清空',
+	2 => '清空',
+);
+
 return array
 (
 	# 表名
@@ -57,6 +62,20 @@ return array
 			'edit'		=> true,
 		),
 
+		'score'		=> array
+		(
+			'type' 		=> 'int-11',
+			'name' 		=> '是否清空积分-选择清空将清空等级里设置的积分',
+			'default' 	=> '1',
+			'desc' 		=> '是否清空积分',
+			'match' 	=> 'is_numeric',
+			'update'	=> 'select',
+			'option'	=> $score,
+			'search'	=> 'select',
+			'list'		=> true,
+			'edit'		=> true,
+		),
+
 		'reorder'		=> array
 		(
 			'type' 		=> 'int-11',

+ 1 - 1
database/user.php

@@ -123,7 +123,7 @@ return array
 			),
 			'type' => 'all',
 			'order' => array('id' => 'desc'),
-			'col' => 'uid,config_id,score|config_id',
+			'col' => 'id,uid,config_id,score|config_id',
 		),
 	)
 );

+ 38 - 2
database/user_level.php

@@ -1,7 +1,14 @@
 <?php
 $level = function()
 {
-	$array = array();
+	$array = array
+	(
+		-1 => array
+		(
+			'id' => -1,
+			'name' => '无',
+		),
+	);
 	$info = Dever::db('score/level')->state();
 	if($info)
 	{
@@ -21,6 +28,12 @@ $type_id = function()
     return $array;
 };
 
+$level_status = array
+(
+	1 => '可以升级',
+	2 => '不可升级',
+);
+
 return array
 (
 	# 表名
@@ -77,7 +90,7 @@ return array
 		(
 			'type' 		=> 'int-11',
 			'name' 		=> '等级名称',
-			'default' 	=> '1',
+			'default' 	=> '-1',
 			'desc' 		=> '等级名称',
 			'match' 	=> 'is_numeric',
 			'update'	=> 'select',
@@ -87,6 +100,15 @@ return array
 			'edit'		=> true,
 		),
 
+		'next_level_id'		=> array
+		(
+			'type' 		=> 'int-11',
+			'name' 		=> '下级等级',
+			'default' 	=> '-1',
+			'desc' 		=> '下级等级',
+			'match' 	=> 'is_numeric',
+		),
+
 		'type'		=> array
 		(
 			'type' 		=> 'int-11',
@@ -101,6 +123,20 @@ return array
 			//'edit'		=> true,
 		),
 
+		'level_status'		=> array
+		(
+			'type' 		=> 'int-11',
+			'name' 		=> '是否可以升级',
+			'default' 	=> '2',
+			'desc' 		=> '是否可以升级',
+			'match' 	=> 'is_numeric',
+			//'update'	=> 'select',
+			'option'	=> $level_status,
+			//'search'	=> 'select',
+			//'list'		=> true,
+			//'edit'		=> true,
+		),
+
 		'info'      => array
         (
             'type'      => 'varchar-300',

+ 39 - 10
lib/Core.php

@@ -209,26 +209,32 @@ class Core
 	}
 
 	/**
-	 * 根据积分算等级
+	 * 根据积分算等级,如果是自动升级,则直接升级,如果是手动升级,则将其标识置为可以升级状态。
 	 *
 	 * @return mixed
 	 */
 	public function setLevel($uid, $level_type)
 	{
-		if ($level_type['type'] == 2) {
-			return;
-		}
 		# 获取当前用户的等级
 		$where['uid'] = $uid;
-		$where['level_type_id'] = $type_id;
+		$where['level_type_id'] = $level_type['id'];
 		$user_level = Dever::db('score/user_level')->one($where);
+
+		/*
 		if ($user_level && $user_level['type'] == 2) {
 			return;
-		} elseif ($user_level && $user_level['type'] == 1) {
+		} else
+		*/
+
+		$update = array();
+		if ($user_level) {
 			$config = Dever::db('score/level')->one($user_level['level_id']);
 			$level = $config['level'] + 1;
+			$method = 'update';
+			$update['where_id'] = $user_level['id'];
 		} else {
 			$level = 1;
+			$method = 'insert';
 		}
 
 		$config = Dever::db('score/level')->one(array('level' => $level, 'level_type_id' => $level_type['id'], 'state' => 1));
@@ -236,6 +242,16 @@ class Core
 		if ($config) {
 			# 是否能升级
 			$yes = false;
+
+			if ($config['total_type'] == 1 && $config['total'] > 0) {
+				# 查看是否超过总数
+				$total = Dever::db('score/user_level')->total(array('level_id' => $config['id']));
+
+				if ($total >= $config['total']) {
+					return $yes;
+				}
+			}
+			
 			$rule = Dever::array_decode($config['score']);
 			if ($rule) {
 				$user_score = Dever::db('score/user')->getScoreByConfig($where);
@@ -245,6 +261,13 @@ class Core
 						$num = $v['num'];
 						if (isset($user_score[$score]) && $user_score[$score]['score'] && $user_score[$score]['score'] >= $num) {
 							$yes = $config['id'];
+
+							# 是否清空积分 当type为自动并且score为2时
+							if ($level_type['score'] == 2 && $level_type['type'] == 1) {
+								$user_score_update['where_id'] = $user_score[$score]['id'];
+								$user_score_update['score'] = $user_score[$score]['score'] - $num;
+								Dever::db('score/user')->update($user_score_update);
+							}
 						} else {
 							$yes = false;
 						}
@@ -252,13 +275,19 @@ class Core
 				}
 			}
 
+			# 可以升级
 			if ($yes) {
-				# 可以升级
-				if ($user_level) {
-					Dever::db('score/user_level')->update(array('where_id' => $user_level['id'], 'level_id' => $yes, 'level_type_id' => $level_type['id']));
+				if ($level_type['type'] == 2) {
+					$update['next_level_id'] = $yes;
+					$update['level_status'] = 1;
 				} else {
-					Dever::db('score/user_level')->insert(array('uid' => $uid,'level_id' => $yes, 'type' => 1, 'level_type_id' => $level_type['id']));
+					$update['level_id'] = $update['next_level_id'] = $yes;
+					$update['level_status'] = 2;
 				}
+
+				$update['uid'] = $uid;
+				$update['level_type_id'] = $level_type['id'];
+				Dever::db('score/user_level')->$method($update);
 			}
 		}
 	}

+ 15 - 2
lib/Level.php

@@ -20,6 +20,7 @@ class Level
 			$result['current']['name'] = $level['name'];
 			$result['current']['level'] = $level['level'];
 			$result['current']['key'] .= $level['level'];
+			$result['current']['status'] = $userLevel['level_status'];
 
 			if ($next_level) {
 				$result['next']['id'] = $next_level['id'];
@@ -32,6 +33,18 @@ class Level
 		return $result;
 	}
 
+	# 手动升级接口
+	public function update($uid, $level_type_id)
+	{
+		$level_type = Dever::db('score/level_type')->one($level_type_id);
+		if ($level_type) {
+			# 将手动转为自动
+			$level_type['type'] = 1;
+			Dever::load('score/lib/core')->setLevel($uid, $level_type);
+		}
+		return true;
+	}
+
 	private function config($prefix)
 	{
 		$result = array
@@ -44,7 +57,7 @@ class Level
 				# 名称
 				'name' => '',
 				# 等级数字
-				'level' => '',
+				'level' => 0,
 				# 唯一key
 				'key' => $prefix,
 			),
@@ -57,7 +70,7 @@ class Level
 				# 名称
 				'name' => '',
 				# 等级数字
-				'level' => '',
+				'level' => 0,
 				# 唯一key
 				'key' => $prefix,
 			),