OrderService.php 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. <?php
  2. namespace App\Services;
  3. use App\Http\AppFlyerEvent\AppflyerEvent;
  4. use App\Http\helper\Helper;
  5. use App\Http\helper\HttpCurl;
  6. use App\Http\helper\NumConfig;
  7. use App\Models\AgentUser;
  8. use App\Models\PrivateMail;
  9. use App\Models\RecordOperateLog;
  10. use App\Models\RecordScoreInfo;
  11. use App\Models\RecordUserDataStatistics;
  12. use Illuminate\Support\Facades\DB;
  13. use Illuminate\Support\Facades\Log;
  14. use Illuminate\Support\Facades\Redis;
  15. class OrderService
  16. {
  17. protected $FirstCharge = 10;
  18. protected $FirstChargeGive = 60;
  19. /**
  20. * 支付成功 处理逻辑
  21. * @param $GiftsID // 首冲礼包ID
  22. * @param $user_id // 用户ID
  23. * @param $payAmt // 支付金额--元
  24. * @param $order_sn // 订单号
  25. */
  26. public function paySuccess($GiftsID, $user_id, $payAmt, $order_sn)
  27. {
  28. $give = $czReason = $cjReason = 0;
  29. // 判断是不是首冲礼包
  30. if (!empty($GiftsID)) {
  31. if ($GiftsID < 100) { // 礼包--首冲
  32. $GiftsData = [
  33. 'UserID' => $user_id,
  34. 'GiftsID' => $GiftsID,
  35. 'BuyCount' => 1,
  36. 'LastBuyDate' => date('Y-m-d H:i:s')
  37. ];
  38. // 卖出去数量 +1
  39. DB::connection('write')->table('QPAccountsDB.dbo.FirstRechargeGifts')->where('GiftsID', $GiftsID)->increment('TotalCount');
  40. $userGifts = DB::connection('write')->table('QPAccountsDB.dbo.UserFirstRechargeGifts')->where('UserID', $user_id)->where('GiftsID', $GiftsID)->first();
  41. if ($userGifts) {
  42. DB::connection('write')->table('QPAccountsDB.dbo.UserFirstRechargeGifts')->where('UserID', $user_id)->where('GiftsID', $GiftsID)->increment('BuyCount');
  43. } else {
  44. DB::connection('write')->table('QPAccountsDB.dbo.UserFirstRechargeGifts')->insert($GiftsData);
  45. }
  46. // 给服务端更新首冲状态
  47. DB::connection('write')->table('QPAccountsDB.dbo.UserTabData')
  48. ->where('UserID', $user_id)
  49. ->update(['RechargeGiftTime' => date('Y-m-d H:i:s')]);
  50. $Gifts = DB::connection('write')->table('QPAccountsDB.dbo.FirstRechargeGifts')->where('GiftsID', $GiftsID)->first();
  51. $favorable_price = $Gifts->AllScore;
  52. $give = $Gifts->ExtraScore;
  53. $Recharge = $Gifts->Price;
  54. $czReason = 50;
  55. $cjReason = 51;
  56. } elseif ($GiftsID > 100 && $GiftsID < 200) { // 周卡
  57. $CardID = $GiftsID - 100;
  58. $WeeklyCard = DB::connection('write')->table('QPPlatformDB.dbo.MonthCard')->where('CardID', $CardID)->first();
  59. $favorable_price = $WeeklyCard->FirstReward / 100;
  60. $Recharge = $WeeklyCard->Price;
  61. } elseif ($GiftsID == 200) { // 10元首充
  62. $RechargeNum = $this->FirstCharge * NumConfig::NUM_VALUE;
  63. // 执行首充存储
  64. $result = StoredProcedure::FirstCharge($user_id, $RechargeNum, 2)[0]->Ret ?? 0;
  65. Log::info('10元首充返回结果:' . $result);
  66. if ($result != 0) {
  67. return 'fail';
  68. }
  69. $give = $this->FirstChargeGive * NumConfig::NUM_VALUE; // 赠送
  70. $favorable_price = $this->FirstCharge; // 充值
  71. $Recharge = $this->FirstCharge; // 充值
  72. $czReason = 1;
  73. }elseif ($GiftsID == 300){ // 谷歌支付
  74. $give = 0; // 赠送
  75. $favorable_price = $payAmt; // 充值
  76. $Recharge = $payAmt; // 充值
  77. $czReason = 1;
  78. }
  79. } else { // 普通订单
  80. // 查找送的金额
  81. $recharge_gear = DB::connection('write')->table('agent.dbo.recharge_gear')->where('money', $payAmt)->select('favorable_price', 'give')->first();
  82. $Recharge = $recharge_gear->favorable_price;
  83. $give = $recharge_gear->give;
  84. $favorable_price = $Recharge + $give;
  85. $czReason = 1;
  86. $cjReason = 45;
  87. }
  88. // // 发送邮件给玩家
  89. // $TitleString = 'Transacción de moedas completada';
  90. // $TextString = "
  91. //Adquira adereços:{$favorable_price} Moedas
  92. //Número do pedido:{$order_sn}
  93. //Se você tiver alguma dúvida, entre em contato com o atendimento ao cliente.
  94. //";
  95. // PrivateMail::sendMail(2, $user_id, $TitleString, $TextString, '', $order_sn, $payAmt);
  96. PrivateMail::PaySuccess($user_id,$payAmt,$favorable_price,$order_sn);
  97. // 增加充值记录
  98. $query = DB::connection('write')->table('QPAccountsDB.dbo.YN_VIPAccount')
  99. ->where('UserID', $user_id)
  100. ->value('Recharge');
  101. if ($query) {
  102. DB::connection('write')->table('QPAccountsDB.dbo.YN_VIPAccount')
  103. ->where('UserID', $user_id)
  104. ->increment('Recharge', $payAmt);
  105. } else {
  106. DB::connection('write')->table('QPAccountsDB.dbo.YN_VIPAccount')
  107. ->where('UserID', $user_id)
  108. ->insert(['Recharge' => $payAmt, 'UserID' => $user_id]);
  109. }
  110. $favorable_price = $favorable_price * 100;
  111. $firstScore = DB::connection('write')->table('QPTreasureDB.dbo.GameScoreInfo')->where('UserID', $user_id)->value('Score');
  112. $Score = $favorable_price + $firstScore;
  113. Log::info('变化金币' . $Score);
  114. // 记录订单变化后金币
  115. DB::connection('write')->table('agent.dbo.order')
  116. ->where('order_sn', $order_sn)
  117. ->update(['after_amount' => $Score]);
  118. // 不是周卡的时候执行
  119. if ($GiftsID < 100 || $GiftsID >= 200) {
  120. // 增加用户金币
  121. DB::connection('write')->table('QPTreasureDB.dbo.GameScoreInfo')->where('UserID', $user_id)->increment('Score', $favorable_price);
  122. }
  123. // 增加用户金币变化记录
  124. RecordScoreInfo::addScore($user_id, ($Recharge * 100), $czReason); #充值
  125. RecordScoreInfo::addScore($user_id, ($give * 100), $cjReason); #赠送彩金
  126. // 充值推广佣金
  127. (new AgentUser())->reward($user_id, $payAmt, $order_sn);
  128. // 增加用户充值 值
  129. RecordUserDataStatistics::updateOrAdd($user_id, 0, $payAmt);
  130. // 埋点记录 -- 支付成功
  131. RecordOperateLog::add_log(10222, $user_id, 0);
  132. // 埋点记录 -- 支付卢比
  133. RecordOperateLog::add_log(30102, $user_id, $payAmt);
  134. $dataToJson = [
  135. 'userID' => $user_id,
  136. 'payAmt' => $payAmt,
  137. 'favorable_price' => $favorable_price,
  138. 'Score' => $Score,
  139. 'GiftsID' => $GiftsID
  140. ];
  141. $dataToJson = \GuzzleHttp\json_encode($dataToJson);
  142. Log::info("支付成功回调 :" . $dataToJson);
  143. // 周卡 -- 执行存储过程
  144. if (!empty($GiftsID) && $GiftsID > 100 && $GiftsID < 200) {
  145. $CardID = (int)$GiftsID - 100;
  146. StoredProcedure::BuyMonthCard($user_id, $CardID, $order_sn);
  147. // 开始执行时间
  148. $startTime = Helper::millisecond();
  149. Log::info('GSP_GP_BuyMonthCard 执行时间:' . ((Helper::millisecond() - $startTime) / 1000));
  150. }
  151. # 链接redis -- 防止三方重复回调
  152. Redis::lPush('payService', $dataToJson);
  153. // }
  154. return true;
  155. }
  156. }