diff --git a/Application/Admin/Controller/PromoteGameRatioController.class.php b/Application/Admin/Controller/PromoteGameRatioController.class.php index ca672fba3..3d1c7d0ca 100644 --- a/Application/Admin/Controller/PromoteGameRatioController.class.php +++ b/Application/Admin/Controller/PromoteGameRatioController.class.php @@ -28,7 +28,7 @@ class PromoteGameRatioController extends ThinkController $page = $params['p'] ? intval($params['p']) : 1; $row = $params['row'] ? intval($params['row']) : 10; - $map['_string'] = '1 = 1'; + $map['_string'] = 'game_id = relation_game_id'; if ($promoteId) { $map['promote_id'] = intval($promoteId); } @@ -43,11 +43,13 @@ class PromoteGameRatioController extends ThinkController if ($group == 1) { $query = D(self::MODEL_NAME)->field($field, true) ->where($map) + ->group('relation_game_id') ->order('update_time desc, id desc'); $metaTitle = $csvTitle = '公会分成管理'; } else { $query = M(self::MODEL_NAME . '_log', 'tab_')->field($field, true) ->where($map) + ->group('relation_game_id') ->order('create_time desc, id desc'); $metaTitle = $csvTitle = '公会分成申请记录'; } @@ -161,7 +163,7 @@ class PromoteGameRatioController extends ThinkController $this->assign('group', $group); $this->assign('records', $records); $this->assign('count', $count); - $this->assign('gameList', getAllGameList()); + $this->assign('gameList', getAllGameList(true)); $this->assign('promoteList', getPromoteByLevel(1)); $this->assign('statusList', self::$statusList); $this->assign('reviewRule', $reviewRule); @@ -232,6 +234,7 @@ class PromoteGameRatioController extends ThinkController $save['remark'] = $params['remark'] ?? ''; $save['status'] = 0; $save['update_time'] = $time; + $model = new PromoteGameRatioModel(); if (!empty($params['id'])) {//修改 $promoteGameRatio = D(self::MODEL_NAME)->find($params['id']); if (empty($promoteGameRatio)) { @@ -245,13 +248,25 @@ class PromoteGameRatioController extends ThinkController $save['last_ratio'] = $promoteGameRatio['ratio']; $save['last_ratio_status'] = 1; } - $save['id'] = intval($params['id']); - $result = D(self::MODEL_NAME)->save($save); + $saveMap['relation_game_id'] = $promoteGameRatio['relation_game_id']; + $result = D(self::MODEL_NAME)->where($saveMap)->save($save); $logResult = $result; } else { $result = true; $logResult = false; } + + if ($result === false) { + $this->error('保存失败'); + } + if ($logResult) { + $promoteGameRatioIds = D(self::MODEL_NAME)->where(array('relation_game_id' => $promoteGameRatio['relation_game_id']))->getField('id', true); + if (!empty($promoteGameRatioIds)) { + foreach ($promoteGameRatioIds as $promoteGameRatioId) { + $model->addLog($promoteGameRatioId); + } + } + } } else {//新增 if (empty($params['promote_id'])) { $this->error('请选择会长账号'); @@ -261,6 +276,14 @@ class PromoteGameRatioController extends ThinkController } $promoteId = intval($params['promote_id']); $gameId = intval($params['game_id']); + $relationGameId = D('game')->where(array('id' => $gameId))->getField('relation_game_id'); + if (empty($relationGameId)) { + $this->error('数据异常'); + } + $gameIds = D('game')->where(array('relation_game_id' => $relationGameId))->getField('id', true); + if (empty($gameIds)) { + $this->error('数据异常'); + } $promote = M('promote', 'tab_')->find($promoteId); if (empty($promote) || $promote['level'] != 1) { @@ -270,36 +293,35 @@ class PromoteGameRatioController extends ThinkController $this->isWithdraw($promoteId, $save['begin_time']); $map['promote_id'] = $promoteId; - $map['game_id'] = $gameId; - $promoteGameRatio = D(self::MODEL_NAME)->where($map)->find(); - if ($promoteGameRatio) { - $this->error('网络异常'); - } $save['promote_id'] = $promoteId; - $save['game_id'] = $gameId; $save['last_turnover_ratio'] = ''; $save['applicant_id'] = is_login(); $save['create_time'] = $time; - $result = D(self::MODEL_NAME)->add($save); - $logResult = $result; - } - - if ($result === false) { - $this->error('保存失败'); - } else { - if ($logResult) { - if (empty($params['id'])) { - $promoteGameRatioId = $result; - } else { - $promoteGameRatioId = $params['id']; + M()->startTrans(); + foreach ($gameIds as $gameId) { + $map['game_id'] = $gameId; + $promoteGameRatio = D(self::MODEL_NAME)->where($map)->find(); + if ($promoteGameRatio) { + $this->error('网络异常'); } - $model = new PromoteGameRatioModel(); - $model->addLog($promoteGameRatioId); - } + $save['game_id'] = $gameId; + $save['relation_game_id'] = $relationGameId; + $result = D(self::MODEL_NAME)->add($save); + $logResult = $result; - $this->success('保存成功', U('lists')); + if ($result === false) { + M()->rollback(); + $this->error('保存失败'); + } + if ($logResult) { + $model->addLog($result); + } + } + M()->commit(); } + + $this->success('保存成功', U('lists')); } else { $params = I('get.'); $id = $params['id'] ?? 0; @@ -365,8 +387,11 @@ class PromoteGameRatioController extends ThinkController $this->error('操作失败'); } + $promoteGameRatioMap['id'] = ['in', $ids]; + $relationGameIds = D(self::MODEL_NAME)->where($promoteGameRatioMap)->getField('relation_game_id', true); + $time = time(); - $map['id'] = ['in', $ids]; + $map['relation_game_id'] = ['in', $relationGameIds]; $map['status'] = 0; $save['status'] = $status; $save['reviewer_id'] = is_login(); @@ -378,22 +403,18 @@ class PromoteGameRatioController extends ThinkController $result = D(self::MODEL_NAME)->where($map)->save($save); if ($result) { $model = new PromoteGameRatioModel(); - foreach ($ids as $id) { - $model->addLog($id); - if ($status == 1) { - $promoteGameRatio = D(self::MODEL_NAME)->find($id); - if (!empty($promoteGameRatio)) { + $promoteGameRatios = D(self::MODEL_NAME)->where(array('relation_game_id' => ['in', $relationGameIds]))->select(); + if (!empty($promoteGameRatios)) { + foreach ($promoteGameRatios as $promoteGameRatio) { + $promoteId = $promoteGameRatio['promote_id']; + $promoteMap['chain'] = ['like', "/{$promoteId}/%"]; + $promoteIds = M('promote', 'tab_')->where($promoteMap)->getField('id', true); + $promoteIds[] = $promoteId; + $model->addLog($promoteGameRatio['id']); + if ($status == 1) { if ($promoteGameRatio['begin_time'] <= strtotime(date('Y-m-d', time()))) { - $promoteId = $promoteGameRatio['promote_id']; - $promoteMap['chain'] = ['like', "/{$promoteId}/%"]; - $promoteIds = M('promote', 'tab_')->where($promoteMap)->getField('id', true); - $promoteIds[] = $promoteId; - - $gameIds = D('game')->where(array('relation_game_id' => $promoteGameRatio['game_id']))->getField('id', true); - $gameIds = $gameIds ?? [-1]; - $spendMap['promote_id'] = ['in', $promoteIds]; - $spendMap['game_id'] = ['in', $gameIds]; + $spendMap['game_id'] = $promoteGameRatio['game_id']; if ($promoteGameRatio['end_time'] > 0) { $spendMap['pay_time'] = ['between', [$promoteGameRatio['begin_time'], $promoteGameRatio['end_time'] + 3600 * 24 - 1]]; } else { @@ -408,6 +429,32 @@ class PromoteGameRatioController extends ThinkController } } } + + foreach ($ids as $id) { + $thisPromoteGameRatio = D(self::MODEL_NAME)->find($id); + if (!empty($thisPromoteGameRatio)) { + $promoteGameRatios = D(self::MODEL_NAME)->where(array('relation_game_id' => $thisPromoteGameRatio['relation_game_id']))->select(); + foreach ($promoteGameRatios as $promoteGameRatio) { + $model->addLog($promoteGameRatio['id']); + if ($status == 1) { + if ($promoteGameRatio['begin_time'] <= strtotime(date('Y-m-d', time()))) { + $spendMap['promote_id'] = ['in', $promoteIds]; + $spendMap['game_id'] = $promoteGameRatio['relation_game_id']; + if ($promoteGameRatio['end_time'] > 0) { + $spendMap['pay_time'] = ['between', [$promoteGameRatio['begin_time'], $promoteGameRatio['end_time'] + 3600 * 24 - 1]]; + } else { + $spendMap['pay_time'] = ['egt', $promoteGameRatio['begin_time']]; + } + $spendMap['pay_status'] = 1; + $spendMap['selle_status'] = 0; + + $spendSave['selle_ratio'] = $promoteGameRatio['ratio']; + M('spend', 'tab_')->where($spendMap)->save($spendSave); + } + } + } + } + } $this->success('操作成功'); } else { $this->error('操作失败'); diff --git a/Application/Admin/Model/WithdrawModel.class.php b/Application/Admin/Model/WithdrawModel.class.php index dbd374981..d4efe6dd4 100644 --- a/Application/Admin/Model/WithdrawModel.class.php +++ b/Application/Admin/Model/WithdrawModel.class.php @@ -226,7 +226,7 @@ class WithdrawModel extends Model{ return 1; } - //月结 +//月结 public function promoteWithdrawPerMonthByPromote($promote, $initial = false, $data = []) { $promoteIds = $this->getPromoteChildren($promote); @@ -268,42 +268,37 @@ class WithdrawModel extends Model{ $balance = 0; $notInGameIds = [-1]; foreach ($promoteGameRatios as $promoteGameRatio) { + $spendWhere['game_id'] = $promoteGameRatio['game_id']; if (!empty($promoteGameRatio['turnover_ratio']) && $promoteGameRatio['begin_time'] <= $settlementBeginTime && (empty($promoteGameRatio['end_time']) || $promoteGameRatio['end_time'] >= $settlementEndTime)) { + $notInGameIds[] = $promoteGameRatio['game_id']; $ratio = $promoteGameRatio['ratio']; $promoteGameRatio['turnover_ratio'] = json_decode($promoteGameRatio['turnover_ratio'], true); $turnoverRatios = array_reverse($promoteGameRatio['turnover_ratio']); - $gameIds = D('game')->where(array('relation_game_id' => $promoteGameRatio['game_id']))->getField('id', true); - if (!empty($gameIds)) { - foreach ($gameIds as $gameId) { - $spendWhere['game_id'] = $gameId; - $notInGameIds[] = $gameId; - $sumAmount = $spendModel->field("sum(pay_amount) as sum_amount") - ->where($spendWhere) - ->find()['sum_amount']; - $sumAmount = $sumAmount ?? 0; - foreach ($turnoverRatios as $turnoverRatio) { - if ($sumAmount >= $turnoverRatio['turnover']) { - $ratio = $turnoverRatio['ratio']; - break; - } - } - - $thisBalance = $spendModel->field("sum(pay_amount * {$ratio}) as balance") - ->where($spendWhere) - ->find()['balance']; - $thisBalance = $thisBalance ?? 0; - $balance = bcadd($balance, $thisBalance, 2); - - $gameRatios[$gameId] = []; - $gameRatios[$gameId][] = [ - 'selle_ratio' => $ratio, - 'default_ratio' => $promoteGameRatio['ratio'], - 'sum_amount' => $sumAmount, - 'begin_time' => $beginTime, - 'end_time' => $endTime, - ]; + $sumAmount = $spendModel->field("sum(pay_amount) as sum_amount") + ->where($spendWhere) + ->find()['sum_amount']; + $sumAmount = $sumAmount ?? 0; + foreach ($turnoverRatios as $turnoverRatio) { + if ($sumAmount >= $turnoverRatio['turnover']) { + $ratio = $turnoverRatio['ratio']; + break; } } + + $thisBalance = $spendModel->field("sum(pay_amount * {$ratio}) as balance") + ->where($spendWhere) + ->find()['balance']; + $thisBalance = $thisBalance ?? 0; + $balance = bcadd($balance, $thisBalance, 2); + + $gameRatios[$promoteGameRatio['game_id']] = []; + $gameRatios[$promoteGameRatio['game_id']][] = [ + 'selle_ratio' => $ratio, + 'default_ratio' => $promoteGameRatio['ratio'], + 'sum_amount' => $sumAmount, + 'begin_time' => $beginTime, + 'end_time' => $endTime, + ]; } } @@ -396,39 +391,34 @@ class WithdrawModel extends Model{ $gameRatios = []; foreach ($promoteGameRatios as $promoteGameRatio) { if (!empty($promoteGameRatio['turnover_ratio']) && $promoteGameRatio['begin_time'] <= $settlementBeginTime && (empty($promoteGameRatio['end_time']) || $promoteGameRatio['end_time'] >= $settlementEndTime)) { + $spendMap['game_id'] = $promoteGameRatio['game_id']; $promoteGameRatio['turnover_ratio'] = json_decode($promoteGameRatio['turnover_ratio'], true); $turnoverRatios = array_reverse($promoteGameRatio['turnover_ratio']); - $gameIds = D('game')->where(array('relation_game_id' => $promoteGameRatio['game_id']))->getField('id', true); - if (!empty($gameIds)) { - foreach ($gameIds as $gameId) { - $spendMap['game_id'] = $gameId; - $sumAmount = $spendModel->field("sum(pay_amount) as sum_amount") - ->where($spendMap) - ->find()['sum_amount']; - $sumAmount = $sumAmount ?? 0; - $ratio = 0; - foreach ($turnoverRatios as $turnoverRatio) { - if ($sumAmount >= $turnoverRatio['turnover']) { - $ratio = $turnoverRatio['ratio']; - break; - } - } - - if ($ratio > 0) { - $ratio = bcsub($ratio, $promoteGameRatio['ratio'], 2); - $thisBalance = bcdiv(bcmul($sumAmount, $ratio, 2), 100, 2); - $balance = bcadd($balance, $thisBalance, 2); - - $gameRatios[$gameId][] = [ - 'selle_ratio' => $ratio, - 'default_ratio' => $promoteGameRatio['ratio'], - 'sum_amount' => $sumAmount, - 'begin_time' => date('Y-m-d', $settlementBeginTime), - 'end_time' => date('Y-m-d', $settlementEndTime), - ]; - } + $sumAmount = $spendModel->field("sum(pay_amount) as sum_amount") + ->where($spendMap) + ->find()['sum_amount']; + $sumAmount = $sumAmount ?? 0; + $ratio = 0; + foreach ($turnoverRatios as $turnoverRatio) { + if ($sumAmount >= $turnoverRatio['turnover']) { + $ratio = $turnoverRatio['ratio']; + break; } } + + if ($ratio > 0) { + $ratio = bcsub($ratio, $promoteGameRatio['ratio'], 2); + $thisBalance = bcdiv(bcmul($sumAmount, $ratio, 2), 100, 2); + $balance = bcadd($balance, $thisBalance, 2); + + $gameRatios[$promoteGameRatio['game_id']][] = [ + 'selle_ratio' => $ratio, + 'default_ratio' => $promoteGameRatio['ratio'], + 'sum_amount' => $sumAmount, + 'begin_time' => date('Y-m-d', $settlementBeginTime), + 'end_time' => date('Y-m-d', $settlementEndTime), + ]; + } } } @@ -487,31 +477,26 @@ class WithdrawModel extends Model{ $balance = 0; foreach ($promoteGameRatios as $promoteGameRatio) { if (!empty($promoteGameRatio['turnover_ratio']) && $promoteGameRatio['begin_time'] <= $settlementBeginTime && (empty($promoteGameRatio['end_time']) || $promoteGameRatio['end_time'] >= $settlementEndTime)) { + $spendMap['game_id'] = $promoteGameRatio['game_id']; $promoteGameRatio['turnover_ratio'] = json_decode($promoteGameRatio['turnover_ratio'], true); $turnoverRatios = array_reverse($promoteGameRatio['turnover_ratio']); - $gameIds = D('game')->where(array('relation_game_id' => $promoteGameRatio['game_id']))->getField('id', true); - if (!empty($gameIds)) { - foreach ($gameIds as $gameId) { - $spendMap['game_id'] = $gameId; - $sumAmount = $spendModel->field("sum(pay_amount) as sum_amount") - ->where($spendMap) - ->find()['sum_amount']; - $sumAmount = $sumAmount ?? 0; - $ratio = 0; - foreach ($turnoverRatios as $turnoverRatio) { - if ($sumAmount >= $turnoverRatio['turnover']) { - $ratio = $turnoverRatio['ratio']; - break; - } - } - - if ($ratio > 0) { - $ratio = bcsub($ratio, $promoteGameRatio['ratio'], 2); - $thisBalance = bcdiv(bcmul($sumAmount, $ratio, 2), 100, 2); - $balance = bcadd($balance, $thisBalance, 2); - } + $sumAmount = $spendModel->field("sum(pay_amount) as sum_amount") + ->where($spendMap) + ->find()['sum_amount']; + $sumAmount = $sumAmount ?? 0; + $ratio = 0; + foreach ($turnoverRatios as $turnoverRatio) { + if ($sumAmount >= $turnoverRatio['turnover']) { + $ratio = $turnoverRatio['ratio']; + break; } } + + if ($ratio > 0) { + $ratio = bcsub($ratio, $promoteGameRatio['ratio'], 2); + $thisBalance = bcdiv(bcmul($sumAmount, $ratio, 2), 100, 2); + $balance = bcadd($balance, $thisBalance, 2); + } } } @@ -547,33 +532,28 @@ class WithdrawModel extends Model{ $balance = 0; $notInGameIds = [-1]; foreach ($promoteGameRatios as $promoteGameRatio) { + $spendWhere['game_id'] = $promoteGameRatio['game_id']; if (!empty($promoteGameRatio['turnover_ratio']) && $promoteGameRatio['begin_time'] <= $settlementBeginTime && (empty($promoteGameRatio['end_time']) || $promoteGameRatio['end_time'] >= $settlementEndTime)) { + $notInGameIds[] = $promoteGameRatio['game_id']; $ratio = $promoteGameRatio['ratio']; $promoteGameRatio['turnover_ratio'] = json_decode($promoteGameRatio['turnover_ratio'], true); $turnoverRatios = array_reverse($promoteGameRatio['turnover_ratio']); - $gameIds = D('game')->where(array('relation_game_id' => $promoteGameRatio['game_id']))->getField('id', true); - if (!empty($gameIds)) { - foreach ($gameIds as $gameId) { - $spendWhere['game_id'] = $gameId; - $notInGameIds[] = $gameId; - $sumAmount = $spendModel->field("sum(pay_amount) as sum_amount") - ->where($spendWhere) - ->find()['sum_amount']; - $sumAmount = $sumAmount ?? 0; - foreach ($turnoverRatios as $turnoverRatio) { - if ($sumAmount >= $turnoverRatio['turnover']) { - $ratio = $turnoverRatio['ratio']; - break; - } - } - - $thisBalance = $spendModel->field("sum(pay_amount * {$ratio}) as balance") - ->where($spendWhere) - ->find()['balance']; - $thisBalance = $thisBalance ?? 0; - $balance = bcadd($balance, $thisBalance, 2); + $sumAmount = $spendModel->field("sum(pay_amount) as sum_amount") + ->where($spendWhere) + ->find()['sum_amount']; + $sumAmount = $sumAmount ?? 0; + foreach ($turnoverRatios as $turnoverRatio) { + if ($sumAmount >= $turnoverRatio['turnover']) { + $ratio = $turnoverRatio['ratio']; + break; } } + + $thisBalance = $spendModel->field("sum(pay_amount * {$ratio}) as balance") + ->where($spendWhere) + ->find()['balance']; + $thisBalance = $thisBalance ?? 0; + $balance = bcadd($balance, $thisBalance, 2); } } diff --git a/Application/Common/Common/extend.php b/Application/Common/Common/extend.php index fd93d3863..e774ef468 100644 --- a/Application/Common/Common/extend.php +++ b/Application/Common/Common/extend.php @@ -1106,10 +1106,6 @@ function getGameSelleRatioByPromote($promoteId = null, $gameId = null) $promoteId = intval($promoteId); $gameId = intval($gameId); $promote = M('promote', 'tab_')->find($promoteId); - $gameId = M('game', 'tab_')->where(array('id' => $gameId))->getField('relation_game_id'); - if (empty($gameId)) { - return false; - } if (empty($promote)) { return false; diff --git a/Data/update.sql b/Data/update.sql index 8247cb1d9..4ebe26755 100644 --- a/Data/update.sql +++ b/Data/update.sql @@ -1080,4 +1080,9 @@ ALTER TABLE `tab_promote_game_ratio` MODIFY COLUMN `turnover_ratio` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT '流水分成比例' AFTER `last_ratio_status`, MODIFY COLUMN `last_turnover_ratio` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT '上次流水分成比例'; -UPDATE tab_spend SET selle_ratio = 0.00 where selle_ratio is null \ No newline at end of file +UPDATE tab_spend SET selle_ratio = 0.00 where selle_ratio is null + +ALTER TABLE `tab_promote_game_ratio` +ADD COLUMN `relation_game_id` int(11) NOT NULL DEFAULT 0 COMMENT '关联游戏id' AFTER `game_id`; +ALTER TABLE `tab_promote_game_ratio_log` +ADD COLUMN `relation_game_id` int(11) NOT NULL DEFAULT 0 COMMENT '关联游戏id' AFTER `game_id`; \ No newline at end of file