* @version : HUOSDK 8.0 */ namespace huo\controller\rate; use huo\controller\agent\Agent; use huo\controller\common\Base; use huolib\constant\GameConst; use huolib\status\RateStatus; use huolib\tool\StrUtils; class RateCheck extends Base { const RATE_MAX = 1.0; const RATE_MIN = 0.01; const REBATE_MIN = 0.0; const REBATE_MAX = 990; const REWARD_MIN = 0.0; const REWARD_MAX = 990; /** * 返回信息 * * @param int $code * @param string $msg * @param array $data * * @return array */ public function retMsg($code, $msg = '', $data = []) { $_data['code'] = $code; $_data['msg'] = $msg; if (empty($msg)) { $_data['msg'] = RateStatus::getMsg($code); } $_data['data'] = $data; return $this->huoReturn($_data); } /** * @param string $type game agent group * @param int $app_id * @param int $agent_id * @param array $data * * @return array */ public function checkParam($type, $app_id = 0, $agent_id = 0, $data = []) { if ('game' == $type) { return $this->checkGameParam($app_id, $data); } elseif ('agent' == $type) { return $this->checkAgentParam($app_id, $agent_id, $data); } else { return $this->checkGroupParam($app_id, $agent_id, $data); } } /** * 校验游戏折扣参数 * * @param int $app_id * @param array $data * * @return array */ public function checkGameParam($app_id, $data) { $_rs = $this->checkDataParam($data); if (RateStatus::NO_ERROR != $_rs) { return $this->retMsg($_rs); } $_rc_class = RateCache::ins(); $_gr_data = $_rc_class->getInfoByAppId($app_id); if (empty($_gr_data)) { return $this->retMsg(RateStatus::INVALID_PARAMS); } $_data = array_merge($_gr_data, $data); if (StrUtils::compareNumber($_data['sub_agent_rebate'], $_data['agent_rebate']) > 0) { $_code = RateStatus::SRB_MUST_SMALLER_ARB; return $this->retMsg($_code, RateStatus::getMsg($_code).$_data['agent_rebate']); } if (StrUtils::compareNumber($_data['sub_agent_reward'], $_data['agent_reward']) > 0) { $_code = RateStatus::SRW_MUST_SMALLER_ARW; return $this->retMsg($_code, RateStatus::getMsg($_code).$_data['agent_reward']); } // if (StrUtils::compareNumber($_data['sub_agent_rate'], $_data['agent_rate']) < 0) { // $_code = RateStatus::SR_MUST_LARGER_AR; // // return $this->retMsg($_code, RateStatus::getMsg($_code).$_data['agent_rate']); // } // if (StrUtils::compareNumber($_data['mem_rebate'], $_data['agent_rebate']) > 0) { // $_code = RateStatus::MRB_MUST_SMALLER_ARB; // // return $this->retMsg($_code, RateStatus::getMsg($_code).$_data['agent_rebate']); // } // if (StrUtils::compareNumber($_data['mem_rebate'], $_data['sub_agent_rebate']) > 0) { // $_code = RateStatus::MRB_MUST_SMALLER_ARB; // // return $this->retMsg($_code, RateStatus::getMsg($_code).$_data['sub_agent_rebate']); // } // if (StrUtils::compareNumber($_data['mem_rate'], $_data['agent_rate']) < 0) { // $_code = RateStatus::MR_MUST_LARGER_AR; // // return $this->retMsg($_code, RateStatus::getMsg($_code).$_data['agent_rate']); // } // if (StrUtils::compareNumber($_data['mem_rate'], $_data['sub_agent_rate']) < 0) { // $_code = RateStatus::MR_MUST_LARGER_AR; // // return $this->retMsg($_code, RateStatus::getMsg($_code).$_data['sub_agent_rate']); // } return $this->retMsg(RateStatus::NO_ERROR); } /** * 校验一级渠道折扣参数 * * @param int $app_id * @param int $agent_id * @param array $data * * @return array */ public function checkGroupParam($app_id, $agent_id, $data) { $_rc_class = RateCache::ins(); $_agr_data = $_rc_class->getInfoByAppIdAgentId($app_id, $agent_id); $_data = array_merge($_agr_data, $data); $_rs = $this->checkDataParam($_data); if (RateStatus::NO_ERROR != $_rs) { return $this->retMsg($_rs); } if (StrUtils::compareNumber($_data['sub_agent_rebate'], $_data['agent_rebate']) > 0) { // $_code = RateStatus::SRB_MUST_SMALLER_ARB; // // return $this->retMsg($_code, RateStatus::getMsg($_code).$_data['agent_rebate']); } if (StrUtils::compareNumber($_data['sub_agent_rate'], $_data['agent_rate']) < 0) { $_code = RateStatus::SR_MUST_LARGER_AR; return $this->retMsg($_code, RateStatus::getMsg($_code).$_data['agent_rate']); } if (StrUtils::compareNumber($_data['mem_rebate'], $_data['agent_rebate']) > 0) { $_code = RateStatus::MRB_MUST_SMALLER_ARB; return $this->retMsg($_code, RateStatus::getMsg($_code).$_data['agent_rebate']); } if (StrUtils::compareNumber($_data['mem_rebate'], $_data['sub_agent_rebate']) > 0) { $_code = RateStatus::MRB_MUST_SMALLER_ARB; return $this->retMsg($_code, RateStatus::getMsg($_code).$_data['sub_agent_rebate']); } if (StrUtils::compareNumber($_data['mem_rate'], $_data['agent_rate']) < 0) { $_code = RateStatus::MR_MUST_LARGER_AR; return $this->retMsg($_code, RateStatus::getMsg($_code).$_data['agent_rate']); } if (StrUtils::compareNumber($_data['mem_rate'], $_data['sub_agent_rate']) < 0) { $_code = RateStatus::MR_MUST_LARGER_AR; return $this->retMsg($_code, RateStatus::getMsg($_code).$_data['sub_agent_rate']); } return $this->retMsg(RateStatus::NO_ERROR); } /** * 校验二级渠道参数 * * @param int $app_id * @param int $agent_id * @param array $data * * @return arraycheckGroupParam */ public function checkAgentParam($app_id, $agent_id, $data) { $_rc_class = RateCache::ins(); $_agr_data = $_rc_class->getInfoByAppIdAgentId($app_id, $agent_id); $_data = array_merge($_agr_data, $data); $_rs = $this->checkDataParam($_data); if (RateStatus::NO_ERROR != $_rs) { return $this->retMsg($_rs); } $_parent_id = (new Agent())->getParentId($agent_id); $_pagr_data = $_rc_class->getInfoByAppIdAgentId($app_id, $_parent_id); if (empty($_pagr_data)) { $_pagr_data = $_rc_class->getInfoByAppId($app_id); } if (empty($_pagr_data)) { $_code = RateStatus::INVALID_PARAMS; return $this->retMsg($_code); } if (StrUtils::compareNumber($_data['agent_rebate'], $_pagr_data['agent_rebate']) > 0) { $_code = RateStatus::SRB_MUST_SMALLER_ARB; return $this->retMsg($_code, RateStatus::getMsg($_code).$_pagr_data['agent_rebate']); } if (StrUtils::compareNumber($_data['sub_agent_rate'], $_pagr_data['agent_rate']) < 0) { $_code = RateStatus::SR_MUST_LARGER_AR; return $this->retMsg($_code, RateStatus::getMsg($_code).$_pagr_data['sub_agent_rate']); } if (StrUtils::compareNumber($_data['mem_rebate'], $_data['agent_rebate']) > 0) { $_code = RateStatus::MRB_MUST_SMALLER_ARB; return $this->retMsg($_code, RateStatus::getMsg($_code).$_data['agent_rebate']); } if (StrUtils::compareNumber($_data['mem_rate'], $_data['agent_rate']) < 0) { $_code = RateStatus::MR_MUST_LARGER_AR; return $this->retMsg($_code, RateStatus::getMsg($_code).$_data['agent_rate']); } return $this->retMsg(RateStatus::NO_ERROR); } /** * 先校验所有入参 * * @param $data * * @return int */ public function checkDataParam($data) { if (isset($data['promote_switch'])) { $_rs = $this->checkPromote($data['promote_switch']); if (RateStatus::NO_ERROR != $_rs) { return $_rs; } } if (isset($data['game_rate'])) { $_rs = $this->checkRate($data['game_rate']); if (RateStatus::NO_ERROR != $_rs) { return $_rs; } } if (isset($data['agent_rebate'])) { $_rs = $this->checkRebate($data['agent_rebate']); if (RateStatus::NO_ERROR != $_rs) { return $_rs; } } if (isset($data['sub_agent_rebate'])) { $_rs = $this->checkRebate($data['sub_agent_rebate']); if (RateStatus::NO_ERROR != $_rs) { return $_rs; } } if (isset($data['agent_rate'])) { $_rs = $this->checkRate($data['agent_rate']); if (RateStatus::NO_ERROR != $_rs) { return $_rs; } } if (isset($data['sub_agent_rate'])) { $_rs = $this->checkRate($data['sub_agent_rate']); if (RateStatus::NO_ERROR != $_rs) { return $_rs; } } if (isset($data['mem_rate'])) { $_rs = $this->checkRate($data['mem_rate']); if (RateStatus::NO_ERROR != $_rs) { return $_rs; } } if (isset($data['first_mem_rate'])) { $_rs = $this->checkRate($data['first_mem_rate']); if (RateStatus::NO_ERROR != $_rs) { return $_rs; } } if (isset($data['mem_rebate'])) { $_rs = $this->checkRebate($data['mem_rebate']); if (RateStatus::NO_ERROR != $_rs) { return $_rs; } } if (isset($data['first_mem_rebate'])) { $_rs = $this->checkRebate($data['first_mem_rebate']); if (RateStatus::NO_ERROR != $_rs) { return $_rs; } } if (isset($data['agent_reward'])) { $_rs = $this->checkReward($data['agent_reward']); if (RateStatus::NO_ERROR != $_rs) { return $_rs; } } if (isset($data['sub_agent_reward'])) { $_rs = $this->checkReward($data['sub_agent_reward']); if (RateStatus::NO_ERROR != $_rs) { return $_rs; } } return RateStatus::NO_ERROR; } /** * @param FLOAT $reward * * @return int */ public static function checkReward($reward) { if (!is_numeric($reward)) { return RateStatus::REWARD_IS_ERROR; } if ($reward < self::REWARD_MIN) { return RateStatus::REWARD_TOO_SMALL; } if ($reward > self::REWARD_MAX) { return RateStatus::REWARD_TOO_LARGE; } return RateStatus::NO_ERROR; } /** * @param FLOAT $rate * * @return int */ public static function checkRate($rate) { if (!is_numeric($rate)) { return RateStatus::RATE_IS_ERROR; } if ($rate < self::RATE_MIN) { return RateStatus::RATE_TOO_SMALL; } if ($rate > self::RATE_MAX) { return RateStatus::RATE_TOO_LARGE; } return RateStatus::NO_ERROR; } /** * @param FLOAT $rebate * * @return int */ public static function checkRebate($rebate) { if (!is_numeric($rebate)) { return RateStatus::REBATE_IS_ERROR; } if ($rebate < self::REBATE_MIN) { return RateStatus::REBATE_TOO_SMALL; } if ($rebate > self::REBATE_MAX) { return RateStatus::REBATE_TOO_LARGE; } return RateStatus::NO_ERROR; } /** * @param $promote_switch * * @return int */ public function checkPromote($promote_switch) { if (!is_numeric($promote_switch)) { return RateStatus::INVALID_PARAMS; } if ($promote_switch < GameConst::GAME_PROMOTE_SWITCH_NO || $promote_switch > GameConst::GAME_PROMOTE_SWITCH_CHECK) { return RateStatus::INVALID_PARAMS; } return RateStatus::NO_ERROR; } }