AgentService.php 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. <?php
  2. // 文件路径: app/Game/AgentService.php
  3. namespace App\Game\Services;
  4. use App\Game\AgentLinks;
  5. use App\Game\AgentUser;
  6. use App\Game\AgentUserRecord;
  7. use App\Game\GlobalUserInfo;
  8. use App\Http\helper\NumConfig;
  9. use Carbon\Carbon;
  10. use DB;
  11. use Illuminate\Http\Request;
  12. use Illuminate\Support\Str;
  13. class AgentService
  14. {
  15. /**
  16. * @param $GlobalUID
  17. * @param $UserID
  18. * @param $code
  19. * @return AgentUser
  20. */
  21. public static function SetUserAgent($GlobalUID,$UserID,$code=null)
  22. {
  23. $agentUser=AgentUser::query()->where('GlobalUID',$GlobalUID)->first();
  24. if($agentUser){
  25. return $agentUser;
  26. }
  27. $higher1GUID = null;
  28. $higher2GUID = null;
  29. $higher3GUID = null;
  30. $higher4GUID = null;
  31. $higher1ID = 0;
  32. $higher2ID = 0;
  33. $higher3ID = 0;
  34. $higher4ID = 0;
  35. // 如果提供了分享 code
  36. if ($code) {
  37. $link = AgentLinks::getByCode($code);
  38. if ($link) {
  39. $link->increment('RegNum',1);
  40. $higher1GUID = $link->GlobalUID;
  41. $higher1ID = $link->UserID;
  42. // 查询上级的上级
  43. $Inviter = AgentUser::where('GlobalUID', $higher1GUID)->first();
  44. if ($Inviter) {
  45. $higher2GUID = $Inviter->Higher1GUID;
  46. $higher2ID = $Inviter->Higher1ID;
  47. if($higher2GUID){
  48. AgentUser::query()->where("GlobalUID",$higher2GUID)->increment('downCount2',1);
  49. }
  50. $higher3GUID = $Inviter->Higher2GUID;
  51. $higher3ID = $Inviter->Higher2ID;
  52. if($higher3GUID){
  53. AgentUser::query()->where("GlobalUID",$higher3GUID)->increment('downCount3',1);
  54. }
  55. $higher4GUID = $Inviter->Higher3GUID;
  56. $higher4ID = $Inviter->Higher3ID;
  57. if($higher4GUID){
  58. AgentUser::query()->where("GlobalUID",$higher4GUID)->increment('downCount4',1);
  59. }
  60. }else{
  61. $Inviter=AgentUser::create(['GlobalUID' => $higher1GUID,
  62. 'UserID' => $higher1ID]);
  63. $Inviter->increment('downCount1',1);
  64. }
  65. }
  66. }
  67. // 插入 AgentUser 记录
  68. $agentUser=AgentUser::create([
  69. 'GlobalUID' => $GlobalUID,
  70. 'UserID' => $UserID,
  71. 'LinkCode' => $code ?? '',
  72. 'Higher1GUID' => $higher1GUID,
  73. 'Higher2GUID' => $higher2GUID,
  74. 'Higher3GUID' => $higher3GUID,
  75. 'Higher4GUID' => $higher4GUID,
  76. 'Higher1ID' => $higher1ID,
  77. 'Higher2ID' => $higher2ID,
  78. 'Higher3ID' => $higher3ID,
  79. 'Higher4ID' => $higher4ID,
  80. 'downCount1' => 0,
  81. 'downCount2' => 0,
  82. 'downCount3' => 0,
  83. 'downCount4' => 0,
  84. ]);
  85. // 为新用户创建默认的 Campaign 和 Code
  86. AgentLinks::getDefaultCampaign($GlobalUID);
  87. return $agentUser;
  88. }
  89. public static function recordPerformance($userId, $amount)
  90. {
  91. // 获取用户的邀请链
  92. $user = AgentUser::query()->where('UserID', $userId)->first();
  93. if(!$user){
  94. $guser=GlobalUserInfo::getGameUserInfo('UserID',$userId);
  95. if(!$guser)return;
  96. $user=self::SetUserAgent($guser->GlobalUID,$userId);
  97. }
  98. $invitationChain= [];
  99. if($user->Higher1ID)$invitationChain[]=[$user->Higher1GUID,$user->Higher1ID];
  100. if($user->Higher2ID)$invitationChain[]=[$user->Higher2GUID,$user->Higher2ID];
  101. if($user->Higher3ID)$invitationChain[]=[$user->Higher3GUID,$user->Higher3ID];
  102. if($user->Higher4ID)$invitationChain[]=[$user->Higher4GUID,$user->Higher4ID];
  103. $hasReward=$user->TotalReward;
  104. // 更新 UserAgent 表
  105. if($user->Higher1GUID) {
  106. // $user->increment('TotalReward', $amount);
  107. }
  108. // 遍历上级邀请者并更新业绩
  109. // foreach ($invitationChain as $level => [$Guid,$Uid]) {
  110. //
  111. // $_real_level=$level+1;
  112. // $HigerGUID=null;
  113. // $HigerID=0;
  114. // if($_real_level<count($invitationChain)){
  115. // [$HigerGUID,$HigerID]=$invitationChain[$_real_level];
  116. // }
  117. //
  118. // // 记录到 AgentUserRecord 表
  119. // AgentUserRecord::findOrCreateAndUpdate($Guid,$Uid,$_real_level, $amount,$HigerGUID,$HigerID);
  120. //
  121. //
  122. // }
  123. // 1、每个用户充值后,您可以获得1R$
  124. // 2、当用户充值总额超过100R$,他们被视为优质用户,每个优质用户你可以获得5R$
  125. // 3、您将收到所有用户存入金额1%的现金返还,每个用户最多可以获得100R$
  126. if($user->Higher1GUID){
  127. $parentUser=AgentUser::query()->where('GlobalUID', $user->Higher1GUID)->first();
  128. //$parentUser->RewardLimit 默认值为100,可以调节
  129. if($parentUser&&$user->LinkRewards<$parentUser->RewardLimit*NumConfig::NUM_VALUE) {
  130. //找到具体活动链接
  131. if ($user->LinkCode) {
  132. $link = AgentLinks::getByCode($user->LinkCode);
  133. } else {
  134. $link = AgentLinks::getDefaultCampaign($user->Higher1GUID);
  135. }
  136. //新付费
  137. if ($hasReward == 0) {
  138. $link->increment('PayUserNum', 1);
  139. $link->increment('PayRewards', 1 * NumConfig::NUM_VALUE);
  140. $user->increment('LinkRewards', 1 * NumConfig::NUM_VALUE);
  141. }
  142. //超过100R$
  143. if ($hasReward < 100 * NumConfig::NUM_VALUE && $hasReward + $amount >= 100 * NumConfig::NUM_VALUE) {
  144. $link->increment('PayRewards', 5 * NumConfig::NUM_VALUE);
  145. $user->increment('LinkRewards', 5 * NumConfig::NUM_VALUE);
  146. }
  147. //1% $user->RewardRate 默认值100 /10000 =1%
  148. $link->increment('PayTotal', $amount);
  149. $link->increment('PayRewards', $amount *$user->RewardRate / 10000);
  150. $user->increment('LinkRewards', $amount *$user->RewardRate / 10000);
  151. }
  152. }
  153. }
  154. public static function getShareLink($GlobalUID=null,$ActName='Default')
  155. {
  156. if(!$GlobalUID){
  157. if(GlobalUserInfo::$me){
  158. $GlobalUID=GlobalUserInfo::$me->GlobalUID;
  159. }else{
  160. $GlobalUID='';
  161. }
  162. }
  163. $h5link = env('H5_LINK', 'https://www.usslot777.com/');
  164. if($ActName=='WheelFree100') {
  165. $link = $h5link .'#/cashwheel?act='. self::encodeAct($GlobalUID, $ActName);
  166. }else{
  167. $link = $h5link .'act='.self::encodeAct($GlobalUID, $ActName);
  168. }
  169. return $link;
  170. }
  171. public static function encodeAct($GlobalUID,$ActName)
  172. {
  173. if(empty($GlobalUID))return Str::random(6);
  174. $link=AgentLinks::getCampaign($GlobalUID,$ActName);
  175. return $link->Code;
  176. }
  177. /**
  178. * @param Request $request
  179. * @return AgentLinks|int
  180. */
  181. static public function decodeAct(Request $request)
  182. {
  183. $act = $request->input("act","");
  184. if(empty($act)){
  185. return 0;
  186. }
  187. // $act=self::customDecrypt($act);
  188. // $act=explode("|",$act);
  189. // if(count($act)<2){
  190. // return -1;
  191. // }
  192. // [$ActName,$SpreadID,$SpreadGUID]=$act;
  193. $agentLink=AgentLinks::getByCode($act);
  194. if(!$agentLink)return -1;
  195. return $agentLink;
  196. }
  197. private static function getLevelName($level)
  198. {
  199. $levels = ['top', 'second', 'third', 'fourth'];
  200. return $levels[$level] ?? 'unknown';
  201. }
  202. }