| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 |
- <?php
- /**
- * 聚合渠道 角色管理
- */
- namespace app\api\controller\v2;
- use app\api\controller\Api;
- use app\common\model\ComplexChannel;
- use app\common\model\ComplexRoleModel;
- use think\Db;
- use app\common\model\PolychannelGame;
- class Complex extends Api
- {
- protected $_checkChannel = ['kshy'];
- public function _initialize()
- {
- parent::_initialize();
- }
- // 角色上传
- public function handle()
- {
- $data = $this->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;
- }
- }
|