* @version : HUOSDK 8.0 */ namespace huoRate\controller; use huo\controller\common\Base; use huo\logic\agent\AgentLogic; use huo\model\user\UserModel; use huolib\constant\AgentConst; use huolib\constant\GameConst; use huolib\status\RateStatus; use huolib\tool\StrUtils; use huoRate\model\AgentGameRateModel; 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 int $app_id * @param int $agent_id * @param array $data * * @return array */ public function checkParam($app_id = 0, $agent_id = 0, $data = []) { if (empty($agent_id)) { return $this->checkGameParam($app_id, $data); } $_role_type = (new AgentLogic())->getRoleTypeById($agent_id); if (AgentConst::ROLE_TYPE_GROUP == $_role_type) { return $this->checkGroupParam($app_id, $agent_id, $data); } return $this->checkAgentParam($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); } $_agr_model = new AgentGameRateModel(); $_gr_data = $_agr_model->getInfoByGameAgent($app_id, 0); 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'] * 100); } 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'] * 10); } 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'] * 100); } 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'] * 100); } 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'] * 10); } 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'] * 10); } 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) { $_agr_data = (new AgentGameRateModel())->getInfoByGameAgent($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 array */ public function checkAgentParam($app_id, $agent_id, $data) { $_data = $data; $_agr_model = new AgentGameRateModel(); $_agr_data = $_agr_model->getInfoByGameAgent($app_id, $agent_id); if (!empty($_agr_data)) { $_data = array_merge($_agr_data, $data); } $_rs = $this->checkDataParam($_data); if (RateStatus::NO_ERROR != $_rs) { return $this->retMsg($_rs); } $_parent_id = (new UserModel())->getParentIdById($agent_id); $_parent_agr_data = $_agr_model->getInfoByGameAgent($app_id, $_parent_id); if (empty($_parent_agr_data)) { $_parent_agr_data = $_agr_model->getInfoByGameAgent($app_id, 0); } if (empty($_parent_agr_data)) { $_code = RateStatus::INVALID_PARAMS; return $this->retMsg($_code); } if (StrUtils::compareNumber($_data['sub_agent_rebate'], $_parent_agr_data['agent_rebate']) > 0) { $_code = RateStatus::SRB_MUST_SMALLER_ARB; return $this->retMsg($_code, RateStatus::getMsg($_code).$_parent_agr_data['agent_rebate']); } if (StrUtils::compareNumber($_data['sub_agent_rate'], $_parent_agr_data['agent_rate']) < 0) { $_code = RateStatus::SR_MUST_LARGER_AR; return $this->retMsg($_code, RateStatus::getMsg($_code).$_parent_agr_data['sub_agent_rate']); } if (StrUtils::compareNumber($_data['sub_agent_reward'], $_parent_agr_data['agent_reward']) > 0) { $_code = RateStatus::SRW_MUST_SMALLER_ARW; return $this->retMsg($_code, RateStatus::getMsg($_code).$_parent_agr_data['agent_reward']); } 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 $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 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 $promote_switch * * @return int */ public function checkPromote($promote_switch) { if (false == is_numeric($promote_switch)) { return RateStatus::INVALID_PARAMS; } if ($promote_switch < GameConst::GAME_PROMOTE_SWITCH_CHECK || $promote_switch > GameConst::GAME_PROMOTE_SWITCH_NO) { return RateStatus::INVALID_PARAMS; } return RateStatus::NO_ERROR; } }