* @version : HUOSDK 8.0 */ namespace huo\model\game; use huo\model\common\CommonModel; class GameserverModel extends CommonModel { protected $name = 'game_server'; // 开启自动写入时间戳字段 protected $autoWriteTimestamp = true; /** * 连接游戏 * * @return \think\model\relation\HasOne */ public function game() { return $this->hasOne('huo\model\game\GameModel', 'id', 'app_id')->field('name')->setEagerlyType(0); } /** 添加区服 * * @param $data * * @return bool|mixed */ public function addServer($data) { if (empty($data)) { return false; } if ($_obj = self::create($data, true)) { if ($_obj->id) { $this->addOaServer($_obj->id); } return $_obj->id; } else { return false; } } public function oaSdkColumn() { $_oa_sdk_column_arr = array( 'app_id' => 'app_id', 'server_id' => 'server_id', 'ser_name' => 'ser_name', 'ser_code' => 'ser_code', 'create_time' => 'create_time', 'gamename' => 'gamename', 'server_desc' => 'ser_desc', 'status' => 'status', 'is_delete' => 'is_delete', 'start_time' => 'start_time', 'update_time' => 'update_time', ); return $_oa_sdk_column_arr; } /** * 添加oa 区服 * * @param int $server_id * * @return array|bool */ public function addOaServer($server_id = 0) { $_map = array();/* 避免删除 */ $_map['id'] = $server_id; $_game_base = \think\Db::name($this->name)->where($_map)->find(); if (empty($_game_base)) { \think\Log::write( $_game_base, 'error' ); \think\Log::write( '避免删除', 'error' ); return true; } $_game_base['server_id'] = $server_id; $_g_map = array(); $_g_map['id'] = $_game_base['app_id']; $_game_base['gamename'] = \think\Db::name('game')->where($_g_map)->value('name'); $_send_data = array(); $_oa_sdk = $this->oaSdkColumn(); foreach ($_oa_sdk as $k => $v) { if (isset($_game_base[$v])) { $_send_data[$k] = $_game_base[$v]; } } $_re = \huolib\oa\OaGame::addOaGameServer($_send_data); if ($_re) { \think\Log::write('addOaGameServer到了这里','error'); \think\Log::write($_re,'error'); return $_re; } } /** * 更新oa 的区服信息 * * @param int $server_id * * @return array|bool */ public function updateOaServer($server_id = 0) { $_map = array();/* 避免删除 */ $_map['id'] = $server_id; $_game_base = \think\Db::name($this->name)->where($_map)->find(); if (empty($_game_base)) { \think\Log::write( $_game_base, 'error' ); \think\Log::write( '避免删除', 'error' ); return true; } $_game_base['server_id'] = $server_id; $_g_map = array(); $_g_map['id'] = $_game_base['app_id']; $_game_base['gamename'] = \think\Db::name('game')->where($_g_map)->value('name'); $_send_data = array(); $_oa_sdk = $this->oaSdkColumn(); foreach ($_oa_sdk as $k => $v) { if (isset($_game_base[$v])) { $_send_data[$k] = $_game_base[$v]; } } $_re = \huolib\oa\OaGame::updateOaGameServer($_send_data); if ($_re) { \think\Log::write('updateOaGameServer','error'); \think\Log::write($_re,'error'); return $_re; } } /** * 更新游戏区服 * * @param $server_data * @param $server_id * * @return bool */ public function updateServer($server_data, $server_id) { $_map['id'] = $server_id; $_data = $server_data; $_rs = self::update($_data, $_map, true); if (false == $_rs) { return false; } else { $this->updateOaServer($server_id); return true; } } public function deleteServer($id = 0){ $_data['id'] = $id; $_data['is_delete'] = 1; $_data['delete_time'] = time(); return $this->updateServer($_data,$_data['id']); } /** * @param array $where * @param int $_offset * * @return \think\Paginator * @throws \think\exception\DbException */ public function getList($where = array(), $_offset = 10) { $_offset = isset($where['list_rows'])?$where['list_rows']:$_offset; $_map = ["gameserver_model.is_delete" => 2]; if (isset($where['id']) && !empty($where['id'])) { $_map['gameserver_model.id'] = $where['id']; } if (isset($where['app_id']) && !empty($where['app_id'])) { $_map['gameserver_model.app_id'] = $where['app_id']; } if (isset($where['ser_name']) && !empty($where['ser_name'])) { $_map['gameserver_model.ser_name'] = $where['ser_name']; } $_field = "gameserver_model.id, gameserver_model.ser_name, gameserver_model.ser_desc, gameserver_model.start_time, gameserver_model.status"; $items = self::with('game') ->field($_field) ->where($_map) ->order("id desc") ->paginate($_offset); return $items; } /** * 获取服务器 id name 键值对 */ public function getIdName($id) { } public function _getList($where = array(), $page) { $_map = [ "so.is_delete" => 2, "g.status" => 2, "g.is_delete" => 2, ]; if (isset($where['id']) && !empty($where['id'])) { $_map['so.id'] = $where['id']; } if (isset($where['app_id']) && !empty($where['app_id'])) { $_map['app_id'] = $where['app_id']; } if (isset($where['ser_name']) && !empty($where['ser_name'])) { $_map['so.ser_name'] = $where['ser_name']; } if (isset($where['time']) && !empty($where['time'])) { $_map['so.start_time'] = $where['time']; } $_join = [ ["__GAME__ g", "g.id=so.app_id", 'left'], ["__GAME_VERSION__ gv", "gv.app_id=so.app_id", 'left'], ["__GAME_EXT__ ge", "ge.app_id=so.app_id", 'left'], ]; $items = $this->alias('so') ->field( "g.id gameid,g.name as game_name,g.icon as game_icon,g.category,g.publicity,gv.package_url down_url,gv.size,ge.down_cnt,ge.star_cnt,so.*" ) ->join($_join) ->where($_map) ->order("so.start_time asc") ->page($page)->select()->toArray(); return $items; } }