PkProcessController.php 7.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: guanxl
  5. * Date: 2018/3/25
  6. * Time: 15:30
  7. */
  8. namespace App\Http\Controllers\Console;
  9. use App\Services\BrainstormingService;
  10. use App\Services\TopService;
  11. use App\Services\UserService;
  12. use Laravel\Lumen\Routing\Controller as BaseController;
  13. use Illuminate\Http\Request;
  14. use App\Models\PkRoom;
  15. use App\Models\User;
  16. use Illuminate\Support\Facades\Redis;
  17. class PkProcessController extends BaseController
  18. {
  19. /**
  20. * PK结果处理接口
  21. * @param Request $request
  22. * @return \Illuminate\Http\JsonResponse
  23. */
  24. public function getResultProcess(Request $request){
  25. $params = $request->all();
  26. if(empty($params['room_id'])){
  27. return response()->json([
  28. "error" => 1,
  29. "message" => "无房间号码,无法获取PK结果"
  30. ]);
  31. }
  32. $roomId = $params['room_id'];
  33. //获取PK房间信息
  34. $roomInfo = PkRoom::where('room_id', $roomId)->where('status', 0)->first();
  35. if(!$roomInfo || empty($roomInfo)){
  36. return response()->json([
  37. "error" => 1,
  38. "message" => "无法获取PK结果"
  39. ]);
  40. }
  41. if($roomInfo['is_dispose'] == 1){
  42. return response()->json([
  43. "error" => 1,
  44. "message" => "结果已处理,请勿重复操作"
  45. ]);
  46. }
  47. $sponsorUserId = $roomInfo['sponsor_user_id'];
  48. $challengerUserId = $roomInfo['challenger_user_id'];
  49. $sponsorUserInfo = UserService::getInstance()->getUser($sponsorUserId);
  50. $challengerUserInfo = UserService::getInstance()->getUser($challengerUserId);
  51. $activityInfo = BrainstormingService::getInstance()->get($roomInfo['activity_id']);
  52. $levelStarConfig = json_decode($activityInfo['level_star_config'], true);
  53. $data = [];
  54. $data['sponsor_user_level_ago'] = intval($sponsorUserInfo['user_level']);
  55. $data['sponsor_user_star_ago'] = intval($sponsorUserInfo['user_star']);
  56. $data['sponsor_user_level_name_ago'] = $levelStarConfig[$sponsorUserInfo['user_level']]['name'];
  57. $data['challenger_user_level_ago'] = intval($challengerUserInfo['user_level']);
  58. $data['challenger_user_star_ago'] = intval($challengerUserInfo['user_star']);
  59. $data['challenger_user_level_name_ago'] = $levelStarConfig[$challengerUserInfo['user_level']]['name'];
  60. if($roomInfo['win_user_id'] == 0) { //平局
  61. $data['sponsor_user_level_now'] = intval($sponsorUserInfo['user_level']);
  62. $data['sponsor_user_star_now'] = intval($sponsorUserInfo['user_star']);
  63. $data['sponsor_user_level_name_now'] = $levelStarConfig[$sponsorUserInfo['user_level']]['name'];
  64. $data['challenger_user_level_now'] = intval($challengerUserInfo['user_level']);
  65. $data['challenger_user_star_now'] = intval($challengerUserInfo['user_star']);
  66. $data['challenger_user_level_name_now'] = $levelStarConfig[$challengerUserInfo['user_level']]['name'];
  67. $data['sponsor_level_need_star'] = intval($levelStarConfig[$sponsorUserInfo['user_level']]['star']);
  68. $data['challenger_level_need_star'] = intval($levelStarConfig[$challengerUserInfo['user_level']]['star']);
  69. User::where('user_id', $sponsorUserId)->update(['win_continuity'=>0]);
  70. User::where('user_id', $challengerUserId)->update(['win_continuity'=>0]);
  71. $data['sponsor_win_continuity'] = 0;
  72. $data['challenger_win_continuity'] = 0;
  73. } else { //有胜负
  74. $winUserId = $roomInfo['win_user_id'];
  75. $failUserId = $roomInfo['win_user_id'] == $roomInfo['sponsor_user_id'] ? $roomInfo['challenger_user_id'] : $roomInfo['sponsor_user_id'];
  76. $winUserInfo = $roomInfo['win_user_id'] == $roomInfo['sponsor_user_id'] ? $sponsorUserInfo : $challengerUserInfo;
  77. $failUserInfo = $roomInfo['win_user_id'] == $roomInfo['sponsor_user_id'] ? $challengerUserInfo : $sponsorUserInfo;
  78. $winUserQuery = [];
  79. if ($winUserInfo['user_star'] >= $levelStarConfig[$winUserInfo['user_level']]['star']) { //需要提升PK段位
  80. //小于最高段位则增加段位,重置星级
  81. if($winUserInfo['user_level'] < count($levelStarConfig)){
  82. $winUserQuery['user_level'] = $winUserInfo['user_level'] + 1;
  83. $winUserQuery['user_star'] = 1;
  84. } else {
  85. $winUserQuery['user_star'] = $winUserInfo['user_star'] + 1;
  86. }
  87. $winUserQuery['win_continuity'] = $winUserInfo['win_continuity'] + 1;
  88. } else { //只需要提升星级
  89. $winUserQuery['user_star'] = $winUserInfo['user_star'] + 1;
  90. $winUserQuery['win_continuity'] = $winUserInfo['win_continuity'] + 1;
  91. }
  92. $failUserQuery = [];
  93. if ($failUserInfo['user_star'] <= 0) { //星级为0时,不扣减段位,不扣减星级
  94. $failUserQuery['user_star'] = 0;
  95. } else {
  96. $failUserQuery['user_star'] = $failUserInfo['user_star'] - 1;
  97. }
  98. $failUserQuery['win_continuity'] = 0;
  99. //修改PK双方的星段
  100. User::where('user_id', $winUserId)->update($winUserQuery);
  101. User::where('user_id', $failUserId)->update($failUserQuery);
  102. Redis::del(UserService::REDIS_USERS.':'.$sponsorUserId);
  103. Redis::del(UserService::REDIS_USERS.':'.$challengerUserId);
  104. $sponsorUserInfo_new = UserService::getInstance()->getUser($sponsorUserId);
  105. $challengerUserInfo_new = UserService::getInstance()->getUser($challengerUserId);
  106. $data['sponsor_user_level_now'] = intval($sponsorUserInfo_new['user_level']);
  107. $data['sponsor_user_star_now'] = intval($sponsorUserInfo_new['user_star']);
  108. $data['sponsor_user_level_name_now'] = $levelStarConfig[$sponsorUserInfo_new['user_level']]['name'];
  109. $data['challenger_user_level_now'] = intval($challengerUserInfo_new['user_level']);
  110. $data['challenger_user_star_now'] = intval($challengerUserInfo_new['user_star']);
  111. $data['challenger_user_level_name_now'] = $levelStarConfig[$challengerUserInfo_new['user_level']]['name'];
  112. $data['sponsor_level_need_star'] = intval($levelStarConfig[$sponsorUserInfo_new['user_level']]['star']);
  113. $data['challenger_level_need_star'] = intval($levelStarConfig[$challengerUserInfo_new['user_level']]['star']);
  114. $data['sponsor_win_continuity'] = $sponsorUserInfo_new['win_continuity'];
  115. $data['challenger_win_continuity'] = $challengerUserInfo_new['win_continuity'];
  116. }
  117. PkRoom::where('room_id', $roomId)->update(['is_dispose'=>1]);
  118. //更新redis
  119. TopService::getInstance()->updateUserTop($challengerUserId);
  120. TopService::getInstance()->updateUserTop($sponsorUserId);
  121. return response()->json([
  122. 'error'=>0,
  123. 'message'=>"OK",
  124. 'data'=>$data
  125. ]);
  126. }
  127. }
  128. ?>