|
@@ -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)
|
|
|
{
|
|
|
# 有上限限制
|