input; $validate = [ 'gameid|游戏ID' => 'require', 'channel_mark|渠道标识' => 'require', 'server_id|服务器ID' => 'require', 'server_name|服务器名' => 'require', 'role_id|角色ID' => 'require', 'role_name|角色名' => 'require', // 'role_level|角色等级' => 'require', // 'role_profession_id|角色职业ID' => 'require', // 'role_profession_name|角色职业名称' => 'require', // 'role_gender|角色性别' => 'require', // 'role_power|角色战力' => 'require', // 'role_vip_level|角色VIP等级' => 'require', // 'role_balance|角色用户余额' => 'require', // 'role_party_id|帮派/工会ID' => 'require', // 'role_party_name|帮派/公会名' => 'require', 'role_action|角色事件' => 'require|in:create,enter,up_level', // 角色事件:create=创角, enter=进入服务器, up_level=角色升级 ]; $message = [ 'channel_mark.require' => '渠道标识不能为空', 'role_action.in' => '角色事件 参数有误', ]; $validateResult = $this->validate($data, $validate, $message); if ($validateResult != true) { $this->jsonResult('', 0, $validateResult); } $prefix = strtolower($data['channel_mark']); $gameId = $data['gameid']; $channelInfo = (new ComplexChannel())->getCacheInfoByMark($prefix); if(!$channelInfo){ $this->jsonResult('', 0, '渠道信息不存在!'); } $data['complex_id'] = $channelInfo['id']; $polyChannelGame = (new PolychannelGame())->getCacheInfoById($gameId, $channelInfo['id']); if (!$polyChannelGame) { $this->jsonResult('', 0, '渠道游戏不存在!'); } $signResult = ""; // 特殊渠道处理 if(in_array($data['channel_mark'], $this->_checkChannel)){ $data['complex_param'] = []; if(!empty($polyChannelGame['param'])){ $data['complex_param'] = json_decode($polyChannelGame['param'], 1); } $data['complex_username'] = Db::table('nw_complex_members')->where(['id' => $data['userid']])->value('complex_username')??''; $className = 'app\api\complex\\' . ucfirst($data['channel_mark']); $complexResult = (new $className)->getRole($data); if($complexResult['code'] != 200){ $this->jsonResult('', 0, $complexResult['msg']."({$complexResult['code']})"); } $signResult = $complexResult['data']; } // TODO:针对已上线的游戏中,游戏那边提交了两次接口,有一次是没有角色信息,直接返回成功; if(empty($data['role_id']) || empty($data['role_id'])){ $this->jsonResult($signResult, 1, 'suesss'); } Db::startTrans(); try { $server_id = $this->handleServer($data); if (!$server_id) { return $this->error('区服处理失败!'); } $data['server_id'] = $server_id; $result = $this->handleRole($data); if (!$result) { return $this->error('角色处理失败!'); } DB::commit(); }catch (\Exception $e){ DB::rollback(); $this->jsonResult('', 0, '操作失败:'.$e->getMessage()); } $this->jsonResult($signResult, 1, 'suesss'); } private function handleServer($data){ $where = [ 'game_id' => $data['gameid'], 'complex_id' => $data['complex_id'], 'server_id' => $data['server_id'], ]; $info = Db::table('nw_complex_server')->where($where)->cache(true, 30)->find(); if($info){ return $info['id']; } $saveData = [ 'game_id' => $data['gameid'], 'complex_id' => $data['complex_id'], 'server_id' => $data['server_id'], 'server_name' => $data['server_name'], 'create_time' => time(), ]; $result = Db::table('nw_complex_server')->cache(true, 30)->insertGetId($saveData); if($result){ return $result; } return false; } private function handleRole($data){ // $role_action = $data['role_action']; $where = [ 'game_id' => $data['gameid'], 'complex_id' => $data['complex_id'], 'server_id' => $data['server_id'], 'member_id' => $this->input['userid'], 'role_id' => $data['role_id'], ]; $cacheTime = 600; $cahceName = "compolex_role:".md5(implode('_', $where)); $modelInfo = Db::table('nw_complex_role')->where($where)->cache($cahceName, $cacheTime)->field('id,update_time')->find(); if($modelInfo && ($modelInfo['update_time']+$cacheTime) > time()){ return true; } $saveData = [ 'role_name' => $data['role_name'], 'role_level' => $data['role_level']??'', 'role_profession_id' => $data['role_profession_id']??'', 'role_profession_name' => $data['role_profession_name']??'', 'role_gender' => $data['role_gender']??'', 'role_power' => $data['role_power']??'', 'role_vip_level' => $data['role_vip_level']??'', 'role_balance' => $data['role_balance']??'', 'role_party_id' => $data['role_party_id']??'', 'role_party_name' => $data['role_party_name']??'', ]; if($modelInfo && !empty($modelInfo['id'])){ $saveData['id'] = $modelInfo['id']; $saveData['update_time'] = time(); $result = ComplexRoleModel::cache($cahceName, $cacheTime)->update($saveData); }else{ $saveData['create_time'] = time(); $saveData['update_time'] = time(); $saveData = array_merge($saveData, $where); $result = ComplexRoleModel::cache($cahceName, $cacheTime)->insert($saveData); } if($result){ return true; } return false; } }