AgentService.php 7.7 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. $_real_level=$level+1;
  111. $HigerGUID=null;
  112. $HigerID=0;
  113. if($_real_level<count($invitationChain)){
  114. [$HigerGUID,$HigerID]=$invitationChain[$_real_level];
  115. }
  116. // 记录到 AgentUserRecord 表
  117. AgentUserRecord::findOrCreateAndUpdate($Guid,$Uid,$_real_level, $amount,$HigerGUID,$HigerID);
  118. }
  119. // 1、每个用户充值后,您可以获得1R$
  120. // 2、当用户充值总额超过100R$,他们被视为优质用户,每个优质用户你可以获得5R$
  121. // 3、您将收到所有用户存入金额1%的现金返还,每个用户最多可以获得100R$
  122. if($user->Higher1GUID){
  123. $parentUser=AgentUser::query()->where('GlobalUID', $user->Higher1GUID)->first();
  124. //$parentUser->RewardLimit 默认值为100,可以调节
  125. if($parentUser&&$user->LinkRewards<$parentUser->RewardLimit*NumConfig::NUM_VALUE) {
  126. //找到具体活动链接
  127. if ($user->LinkCode) {
  128. $link = AgentLinks::getByCode($user->LinkCode);
  129. } else {
  130. $link = AgentLinks::getDefaultCampaign($user->Higher1GUID);
  131. }
  132. //新付费
  133. if ($hasReward == 0) {
  134. $link->increment('PayUserNum', 1);
  135. $link->increment('PayRewards', 1 * NumConfig::NUM_VALUE);
  136. $user->increment('LinkRewards', 1 * NumConfig::NUM_VALUE);
  137. }
  138. //超过100R$
  139. if ($hasReward < 100 * NumConfig::NUM_VALUE && $hasReward + $amount >= 100 * NumConfig::NUM_VALUE) {
  140. $link->increment('PayRewards', 5 * NumConfig::NUM_VALUE);
  141. $user->increment('LinkRewards', 5 * NumConfig::NUM_VALUE);
  142. }
  143. //1% $user->RewardRate 默认值100 /10000 =1%
  144. $link->increment('PayTotal', $amount);
  145. $link->increment('PayRewards', $amount *$user->RewardRate / 10000);
  146. $user->increment('LinkRewards', $amount *$user->RewardRate / 10000);
  147. }
  148. }
  149. }
  150. public static function getShareLink($GlobalUID=null,$ActName='Default')
  151. {
  152. if(!$GlobalUID){
  153. if(GlobalUserInfo::$me){
  154. $GlobalUID=GlobalUserInfo::$me->GlobalUID;
  155. }else{
  156. $GlobalUID='';
  157. }
  158. }
  159. $h5link = env('H5_LINK', 'https://h5t.usgamewin.com/');
  160. if($ActName=='WheelFree100') {
  161. $link = $h5link . self::encodeAct($GlobalUID, $ActName);
  162. }else{
  163. $link = $h5link . self::encodeAct($GlobalUID, $ActName);
  164. }
  165. return $link;
  166. }
  167. public static function encodeAct($GlobalUID,$ActName)
  168. {
  169. if(empty($GlobalUID))return Str::random(6);
  170. $link=AgentLinks::getCampaign($GlobalUID,$ActName);
  171. return $link->Code;
  172. }
  173. /**
  174. * @param Request $request
  175. * @return AgentLinks|int
  176. */
  177. static public function decodeAct(Request $request)
  178. {
  179. $act = $request->input("act","");
  180. if(empty($act)){
  181. return 0;
  182. }
  183. // $act=self::customDecrypt($act);
  184. // $act=explode("|",$act);
  185. // if(count($act)<2){
  186. // return -1;
  187. // }
  188. // [$ActName,$SpreadID,$SpreadGUID]=$act;
  189. $agentLink=AgentLinks::getByCode($act);
  190. if(!$agentLink)return -1;
  191. return $agentLink;
  192. }
  193. private static function getLevelName($level)
  194. {
  195. $levels = ['top', 'second', 'third', 'fourth'];
  196. return $levels[$level] ?? 'unknown';
  197. }
  198. }