Complex.php 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. <?php
  2. /**
  3. * 聚合渠道 角色管理
  4. */
  5. namespace app\api\controller\v2;
  6. use app\api\controller\Api;
  7. use app\common\model\ComplexChannel;
  8. use app\common\model\ComplexRoleModel;
  9. use think\Db;
  10. use app\common\model\PolychannelGame;
  11. class Complex extends Api
  12. {
  13. protected $_checkChannel = ['kshy'];
  14. public function _initialize()
  15. {
  16. parent::_initialize();
  17. }
  18. // 角色上传
  19. public function handle()
  20. {
  21. $data = $this->input;
  22. $validate = [
  23. 'gameid|游戏ID' => 'require',
  24. 'channel_mark|渠道标识' => 'require',
  25. 'server_id|服务器ID' => 'require',
  26. 'server_name|服务器名' => 'require',
  27. 'role_id|角色ID' => 'require',
  28. 'role_name|角色名' => 'require',
  29. // 'role_level|角色等级' => 'require',
  30. // 'role_profession_id|角色职业ID' => 'require',
  31. // 'role_profession_name|角色职业名称' => 'require',
  32. // 'role_gender|角色性别' => 'require',
  33. // 'role_power|角色战力' => 'require',
  34. // 'role_vip_level|角色VIP等级' => 'require',
  35. // 'role_balance|角色用户余额' => 'require',
  36. // 'role_party_id|帮派/工会ID' => 'require',
  37. // 'role_party_name|帮派/公会名' => 'require',
  38. 'role_action|角色事件' => 'require|in:create,enter,up_level', // 角色事件:create=创角, enter=进入服务器, up_level=角色升级
  39. ];
  40. $message = [
  41. 'channel_mark.require' => '渠道标识不能为空',
  42. 'role_action.in' => '角色事件 参数有误',
  43. ];
  44. $validateResult = $this->validate($data, $validate, $message);
  45. if ($validateResult != true) {
  46. $this->jsonResult('', 0, $validateResult);
  47. }
  48. $prefix = strtolower($data['channel_mark']);
  49. $gameId = $data['gameid'];
  50. $channelInfo = (new ComplexChannel())->getCacheInfoByMark($prefix);
  51. if(!$channelInfo){
  52. $this->jsonResult('', 0, '渠道信息不存在!');
  53. }
  54. $data['complex_id'] = $channelInfo['id'];
  55. $polyChannelGame = (new PolychannelGame())->getCacheInfoById($gameId, $channelInfo['id']);
  56. if (!$polyChannelGame) {
  57. $this->jsonResult('', 0, '渠道游戏不存在!');
  58. }
  59. $signResult = "";
  60. // 特殊渠道处理
  61. if(in_array($data['channel_mark'], $this->_checkChannel)){
  62. $data['complex_param'] = [];
  63. if(!empty($polyChannelGame['param'])){
  64. $data['complex_param'] = json_decode($polyChannelGame['param'], 1);
  65. }
  66. $data['complex_username'] = Db::table('nw_complex_members')->where(['id' => $data['userid']])->value('complex_username')??'';
  67. $className = 'app\api\complex\\' . ucfirst($data['channel_mark']);
  68. $complexResult = (new $className)->getRole($data);
  69. if($complexResult['code'] != 200){
  70. $this->jsonResult('', 0, $complexResult['msg']."({$complexResult['code']})");
  71. }
  72. $signResult = $complexResult['data'];
  73. }
  74. // TODO:针对已上线的游戏中,游戏那边提交了两次接口,有一次是没有角色信息,直接返回成功;
  75. if(empty($data['role_id']) || empty($data['role_id'])){
  76. $this->jsonResult($signResult, 1, 'suesss');
  77. }
  78. Db::startTrans();
  79. try {
  80. $server_id = $this->handleServer($data);
  81. if (!$server_id) {
  82. return $this->error('区服处理失败!');
  83. }
  84. $data['server_id'] = $server_id;
  85. $result = $this->handleRole($data);
  86. if (!$result) {
  87. return $this->error('角色处理失败!');
  88. }
  89. DB::commit();
  90. }catch (\Exception $e){
  91. DB::rollback();
  92. $this->jsonResult('', 0, '操作失败:'.$e->getMessage());
  93. }
  94. $this->jsonResult($signResult, 1, 'suesss');
  95. }
  96. private function handleServer($data){
  97. $where = [
  98. 'game_id' => $data['gameid'],
  99. 'complex_id' => $data['complex_id'],
  100. 'server_id' => $data['server_id'],
  101. ];
  102. $info = Db::table('nw_complex_server')->where($where)->cache(true, 30)->find();
  103. if($info){
  104. return $info['id'];
  105. }
  106. $saveData = [
  107. 'game_id' => $data['gameid'],
  108. 'complex_id' => $data['complex_id'],
  109. 'server_id' => $data['server_id'],
  110. 'server_name' => $data['server_name'],
  111. 'create_time' => time(),
  112. ];
  113. $result = Db::table('nw_complex_server')->cache(true, 30)->insertGetId($saveData);
  114. if($result){
  115. return $result;
  116. }
  117. return false;
  118. }
  119. private function handleRole($data){
  120. // $role_action = $data['role_action'];
  121. $where = [
  122. 'game_id' => $data['gameid'],
  123. 'complex_id' => $data['complex_id'],
  124. 'server_id' => $data['server_id'],
  125. 'member_id' => $this->input['userid'],
  126. 'role_id' => $data['role_id'],
  127. ];
  128. $cacheTime = 600;
  129. $cahceName = "compolex_role:".md5(implode('_', $where));
  130. $modelInfo = Db::table('nw_complex_role')->where($where)->cache($cahceName, $cacheTime)->field('id,update_time')->find();
  131. if($modelInfo && ($modelInfo['update_time']+$cacheTime) > time()){
  132. return true;
  133. }
  134. $saveData = [
  135. 'role_name' => $data['role_name'],
  136. 'role_level' => $data['role_level']??'',
  137. 'role_profession_id' => $data['role_profession_id']??'',
  138. 'role_profession_name' => $data['role_profession_name']??'',
  139. 'role_gender' => $data['role_gender']??'',
  140. 'role_power' => $data['role_power']??'',
  141. 'role_vip_level' => $data['role_vip_level']??'',
  142. 'role_balance' => $data['role_balance']??'',
  143. 'role_party_id' => $data['role_party_id']??'',
  144. 'role_party_name' => $data['role_party_name']??'',
  145. ];
  146. if($modelInfo && !empty($modelInfo['id'])){
  147. $saveData['id'] = $modelInfo['id'];
  148. $saveData['update_time'] = time();
  149. $result = ComplexRoleModel::cache($cahceName, $cacheTime)->update($saveData);
  150. }else{
  151. $saveData['create_time'] = time();
  152. $saveData['update_time'] = time();
  153. $saveData = array_merge($saveData, $where);
  154. $result = ComplexRoleModel::cache($cahceName, $cacheTime)->insert($saveData);
  155. }
  156. if($result){
  157. return true;
  158. }
  159. return false;
  160. }
  161. }