field('login,register,consume')->where(['channel_id' => $channel_id])->find(); if (!empty($polyChannelInfo)) { switch ($type) { case 'register': //新增 $result = $polyChannelInfo['register']; break; case 'login': //登录 $result = $polyChannelInfo['login']; break; case 'consume': //充值消费 $result = $polyChannelInfo['consume']; break; } } } //聚合渠道判断不冻结时,再判断预警是否冻结 if ($result == false) { //预警冻结记录 $frozenInfo = $frozenModel->field('depf_login,depf_register,depf_consume,status')->where(['channel_id' => $channel_id, 'game_id' => $game_id])->find(); if ($frozenInfo) { //预付状态开启时 if ($frozenInfo['status'] == 1) { $depositModel = new PolyChannelDeposit; //预付款配置信息 $depositInfo = $depositModel->field('total_advance,over_limit,over_limit_amount')->where(['channel_id' => $channel_id])->find(); //预付款配置信息为空时 if (empty($depositInfo)) { $result = true; } else { //实际分成总流水 $real_total_amount = $this->getChannelGameTotalAmount($channel_id); //超过预付款可超额度时 if ($real_total_amount >= ($depositInfo['total_advance'] + $depositInfo['over_limit_amount'])) { switch ($type) { case 'register': //新增 $result = $frozenInfo['depf_register']; break; case 'login': //登录 $result = $frozenInfo['depf_login']; break; case 'consume': //充值消费 $result = $frozenInfo['depf_consume']; break; } } } } else { switch ($type) { case 'register': //新增 $result = $frozenInfo['depf_register']; break; case 'login': //登录 $result = $frozenInfo['depf_login']; break; case 'consume': //充值消费 $result = $frozenInfo['depf_consume']; break; } } } } //预警判断不冻结时,再判断渠道冻结表的状态 if ($result == false) { $channelFrozenInfo = $channelFrozenModel->field('member_login,register,consume')->where(['channel_id' => $channel_id, 'game_id' => $game_id])->find(); if (!empty($channelFrozenInfo)) { switch ($type) { case 'register': //新增 $result = $channelFrozenInfo['register']; break; case 'login': //登录 $result = $channelFrozenInfo['member_login']; break; case 'consume': //充值消费 $result = $channelFrozenInfo['consume']; break; } } } return $result; } /** * 获取渠道实际总流水(即分成以后的流水) * * @param int $channel_id 聚合渠道ID * * @return float */ public function getChannelTotalAmount($channel_id) { $query = Db::query("SELECT SUM(total_amount*divide_point) as total FROM cy_polychannel_game_frozen WHERE `channel_id`={$channel_id} AND `status`=1"); $total_amount = isset($query[0]) ? (float)$query[0]['total'] : 0; return round($total_amount, 2); } // 获取渠道游戏实际总流水(即分成以后的流水) public function getChannelGameTotalAmount($channel_id) { // 与 listGameFrozen 页面计算逻辑一致:从 nw_complex_pay 表实时查询流水 // 1. 获取开启状态的游戏ID $openGameIds = Db::table('cy_polychannel_game_frozen') ->where('channel_id', '=', $channel_id) ->where('status', '=', 1) ->column('game_id'); if (empty($openGameIds)) { return 0; } // 2. 获取游戏配置信息:divide_point=分成, proportion=折扣 $gamePayConfig = Db::table('cy_polychannel_game_frozen')->alias('cpgf') ->join('cy_game_pay_discount cgpd', 'cpgf.game_id = cgpd.game_id', 'LEFT') ->where(['cpgf.game_id' => ['in', $openGameIds], 'cpgf.channel_id' => $channel_id]) ->column('cpgf.divide_point, cgpd.proportion', 'cpgf.game_id'); // 3. 查询每个游戏的流水并计算扣除预付款 $payList = Db::table('nw_complex_pay') ->where(['gameid' => ['in', $openGameIds], 'channel_id' => $channel_id, 'status' => 1]) ->field("gameid, SUM(amount) as amount") ->group("gameid") ->select(); $total = 0; foreach ($payList as $item) { $amount = $item['amount']; // 折扣 if (!empty($gamePayConfig[$item['gameid']]) && $gamePayConfig[$item['gameid']]['proportion'] > 0) { $amount = $amount * $gamePayConfig[$item['gameid']]['proportion']; } // 分成 if (!empty($gamePayConfig[$item['gameid']]) && $gamePayConfig[$item['gameid']]['divide_point'] > 0) { $amount = $amount * $gamePayConfig[$item['gameid']]['divide_point']; } $total += $amount; } return round($total, 2); } }