* @version : HUOSDK 8.0 */ namespace ban; use ban\model\IpBanModel; use huo\controller\member\MemCache; use huolib\constant\CommonConst; use huolib\status\CommonStatus; class Ban { /** * 获取当前model * * @param $type * * @return IpBanModel|MemCache|bool */ private function getModel($type) { switch ($type) { case BanConst::BAN_TYPE_MEM: return (new MemCache()); break; case BanConst::BAN_TYPE_IP: return (new IpBanModel()); break; default: return false; } } /** * 根据类型获取查询字段 * * @param $type * * @return array */ private function getField($type) { $_field = [ 'id' => 'id', 'create_time' => 'create_time' ]; switch ($type) { case BanConst::BAN_TYPE_IP: $_field['ip'] = 'ip'; break; case BanConst::BAN_TYPE_DEVICE: $_field['device_id'] = 'device_id'; break; case BanConst::BAN_TYPE_UDID: $_field['udid'] = 'udid'; break; default: return []; } return $_field; } /** * 根据类型获取查询条件 * * @param $type * @param array $param * * @return array */ private function getWhere($type, $param = []) { $_map = []; if (!empty($param['start_time']) && !empty($param['end_time'])) { $_map['create_time'] = [ 'between', [ strtotime($param['start_time']), CommonConst::CONST_DAY_SECONDS + strtotime($param['end_time']) ] ]; } elseif (!empty($param['start_time'])) { $_map['create_time'] = ['egt', strtotime($param['start_time'])]; } elseif (!empty($param['end_time'])) { $_map['create_time'] = ['elt', CommonConst::CONST_DAY_SECONDS + strtotime($param['end_time'])]; } switch ($type) { case BanConst::BAN_TYPE_IP: if (!empty($param['ip'])) { $_map['ip'] = $param['ip']; } break; case BanConst::BAN_TYPE_DEVICE: if (!empty($param['device_id'])) { $_map['device_id'] = $param['device_id']; } break; case BanConst::BAN_TYPE_UDID: if (!empty($param['udid'])) { $_map['udid'] = $param['udid']; } break; default: } return $_map; } /** * 获取封禁列表 * * @param array $param * @param string $page * @param string $order * * @return array */ public function getBanList($param = [], $page = '1,10', $order = '-create_time') { $_rdata = ['count' => 0, 'list' => []]; if (empty($param['type'])) { return $_rdata; } $_model = $this->getModel($param['type']); $_map = $this->getWhere($param['type'], $param); $_count = $_model->where($_map)->count(); if (empty($_count)) { return $_rdata; } $_field = $this->getField($param['type']); $_order = $_model->orderFilter($order); $_data = $_model->field($_field)->where($_map)->page($page)->order($_order)->select(); if (is_object($_data)) { $_data = $_data->toArray(); } if (empty($_data)) { return $_rdata; } $_rdata['count'] = $_count; $_rdata['list'] = $_data; return $_rdata; } /** * 判断是否封禁 * * @param $type string 判断类型 ip|device|udid * @param $value string 判断值 根据类型传相应的值 * * @return bool 返回 true 已被封禁 false 未封禁 */ public function isBan($type, $value) { $_model = $this->getModel($type); if (false == $_model) { return false; } $_rs = $_model->isBan($value); return $_rs; } /** * 检查玩家使用环境 * * @param $mem_id * @param $ip * * @return bool */ public function checkMemEnv($mem_id, $ip) { $_is_ban_1 = $this->isBan(BanConst::BAN_TYPE_MEM, $mem_id); if ($_is_ban_1) { return BanConst::MEM_BAN_MSG; } $_is_ban_2 = $this->isBan(BanConst::BAN_TYPE_IP, $ip); if ($_is_ban_2) { return BanConst::IP_BAN_MSG; } return CommonStatus::NO_ERROR; } }