CustomController.php 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412
  1. <?php
  2. namespace App\Http\Controllers\Admin;
  3. use App\dao\Pay\AccountPayInfo;
  4. use App\Facade\TableName;
  5. use App\Http\Controllers\Controller;
  6. use App\Http\helper\HttpCurl;
  7. use App\Http\helper\NumConfig;
  8. use App\Http\logic\admin\GlobalLogicController;
  9. use App\Models\AccountsInfo;
  10. use App\Models\AdminScore;
  11. use App\Models\Control;
  12. use App\Models\ControlRecord;
  13. use App\Models\Cpf;
  14. use App\Models\Order;
  15. use App\Models\RecordPlatformData;
  16. use App\Models\Withdrawal;
  17. use App\Services\CreateLog;
  18. use App\Services\Custom;
  19. use App\Services\GameRoomInfo;
  20. use App\Services\GlobalUser;
  21. use App\Services\Paging;
  22. use App\Services\StoredProcedure;
  23. use App\Utility\Helper;
  24. use App\Utility\SetNXLock;
  25. use Illuminate\Http\Request;
  26. use Illuminate\Pagination\Paginator;
  27. use Illuminate\Support\Facades\DB;
  28. use Illuminate\Support\Facades\Redis;
  29. use Illuminate\Support\Facades\Log;
  30. class CustomController extends Controller
  31. {
  32. public function getCallBack(){
  33. $key = 'get_callback';
  34. $res = SetNXLock::getExclusiveLock($key, 5);
  35. if (!$res) {
  36. return apiReturnFail('操作频繁');
  37. }
  38. $admin_id = session('admin')->id;
  39. $customService = new Custom();
  40. $unCall = $customService->userCallCount($admin_id,0,0,0);
  41. if($unCall>300){
  42. return apiReturnFail('未召回用户>2不分配新账号');
  43. }
  44. if($admin_id){
  45. $count = 30;
  46. $topUser = $customService->needCallUser(7,30,500);
  47. $midUser = $customService->needCallUser(7,30,100,499);
  48. $bottomUser = $customService->needCallUser(7,15,20,99);
  49. if($topUser){
  50. $topKey = array_rand($topUser,min(15,count($topUser)));
  51. if (is_array($topKey)) {
  52. foreach ($topKey as $key) {
  53. $user = $topUser[$key];
  54. $email = $this->_checkCall($user->UserID,$user->PhoneNum);
  55. if(!($email === false)){
  56. $insert = $user;
  57. $insert->Email = $email;
  58. $insert->admin_id = $admin_id;
  59. $insert->AddDate = date('Y-m-d H:i:s');
  60. DB::table(TableName::agent() . 'UserCallBack')->insert(json_decode(json_encode($insert),true));
  61. DB::connection('write')->table('QPAccountsDB.dbo.AccountsInfo')->where('UserID', $user->UserID)->update(['Present' => $admin_id]);
  62. $count--;
  63. }
  64. }
  65. } else {
  66. // 如果只选择了一个元素
  67. $user = $topUser[$topKey];
  68. $email = $this->_checkCall($user->UserID,$user->PhoneNum);
  69. if(!($email === false)){
  70. $insert = $user;
  71. $insert->Email = $email;
  72. $insert->admin_id = $admin_id;
  73. $insert->AddDate = date('Y-m-d H:i:s');
  74. DB::table(TableName::agent() . 'UserCallBack')->insert(json_decode(json_encode($insert),true));
  75. DB::connection('write')->table('QPAccountsDB.dbo.AccountsInfo')->where('UserID', $user->UserID)->update(['Present' => $admin_id]);
  76. $count--;
  77. }
  78. }
  79. }
  80. if($midUser){
  81. // $topKey = array_rand($midUser,10);
  82. $topKey = array_rand($midUser,min(10,count($midUser)));
  83. if (is_array($topKey)) {
  84. foreach ($topKey as $key) {
  85. $user = $midUser[$key];
  86. $email = $this->_checkCall($user->UserID,$user->PhoneNum);
  87. if(!($email === false)){
  88. $insert = $user;
  89. $insert->Email = $email;
  90. $insert->admin_id = $admin_id;
  91. $insert->AddDate = date('Y-m-d H:i:s');
  92. DB::table(TableName::agent() . 'UserCallBack')->insert(json_decode(json_encode($insert),true));
  93. DB::connection('write')->table('QPAccountsDB.dbo.AccountsInfo')->where('UserID', $user->UserID)->update(['Present' => $admin_id]);
  94. $count--;
  95. }
  96. }
  97. } else {
  98. // 如果只选择了一个元素
  99. $user = $midUser[$topKey];
  100. $email = $this->_checkCall($user->UserID,$user->PhoneNum);
  101. if(!($email === false)){
  102. $insert = $user;
  103. $insert->Email = $email;
  104. $insert->admin_id = $admin_id;
  105. $insert->AddDate = date('Y-m-d H:i:s');
  106. DB::table(TableName::agent() . 'UserCallBack')->insert(json_decode(json_encode($insert),true));
  107. DB::connection('write')->table('QPAccountsDB.dbo.AccountsInfo')->where('UserID', $user->UserID)->update(['Present' => $admin_id]);
  108. $count--;
  109. }
  110. }
  111. }
  112. if($bottomUser && $count){
  113. $topKey = array_rand($bottomUser,min($count,count($bottomUser)));
  114. if (is_array($topKey)) {
  115. foreach ($topKey as $key) {
  116. $user = $bottomUser[$key];
  117. $email = $this->_checkCall($user->UserID,$user->PhoneNum);
  118. if(!($email === false)){
  119. $insert = $user;
  120. $insert->Email = $email;
  121. $insert->admin_id = $admin_id;
  122. $insert->AddDate = date('Y-m-d H:i:s');
  123. DB::table(TableName::agent() . 'UserCallBack')->insert(json_decode(json_encode($insert),true));
  124. DB::connection('write')->table('QPAccountsDB.dbo.AccountsInfo')->where('UserID', $user->UserID)->update(['Present' => $admin_id]);
  125. }
  126. }
  127. } else {
  128. // 如果只选择了一个元素
  129. $user = $bottomUser[$topKey];
  130. $email = $this->_checkCall($user->UserID,$user->PhoneNum);
  131. if(!($email === false)){
  132. $insert = $user;
  133. $insert->Email = $email;
  134. $insert->admin_id = $admin_id;
  135. $insert->AddDate = date('Y-m-d H:i:s');
  136. DB::table(TableName::agent() . 'UserCallBack')->insert(json_decode(json_encode($insert),true));
  137. DB::connection('write')->table('QPAccountsDB.dbo.AccountsInfo')->where('UserID', $user->UserID)->update(['Present' => $admin_id]);
  138. }
  139. }
  140. }
  141. }
  142. SetNXLock::release($key);
  143. return apiReturnSuc();
  144. }
  145. private function _checkCall($UserID,$phone){
  146. if(!$phone){
  147. return false;
  148. }else{
  149. //get email
  150. $AccountWithDrawInfo = DB::table(TableName::QPAccountsDB() . 'AccountWithDrawInfo')
  151. ->lock('WITH(NOLOCK)')
  152. ->where('UserID', $UserID)
  153. ->first();
  154. if($AccountWithDrawInfo){
  155. $email = $AccountWithDrawInfo->EmailAddress;
  156. }else{
  157. $email = '';
  158. }
  159. if($email){
  160. //check other phone account
  161. $otherPhoneAccount = DB::connection('read')->table(TableName::QPAccountsDB() . 'AccountsInfo as ai')
  162. ->where('ai.IsAndroid', 0)
  163. ->join(TableName::QPAccountsDB() . 'AccountPhone as ap', 'ai.UserID', 'ap.UserID')
  164. ->where('ap.PhoneNum', $phone)
  165. ->where('ai.LastLogonDate','>', date('Y-m-d H:i:s',strtotime("-7 days")))
  166. ->count();
  167. if($otherPhoneAccount){
  168. Log::info('【用户召回去重】' .$otherPhoneAccount.'-'.$phone);
  169. return false;
  170. }
  171. }
  172. return $email;
  173. }
  174. }
  175. //用户列表
  176. public function userListNew(Request $request)
  177. {
  178. $gameID = (int)$request->GameID ?: "";
  179. $startTime = str_replace('T', ' ', $request->start_time ?? "");
  180. $endTime = str_replace('T', ' ', $request->end_time ?? "");
  181. $lstartTime = str_replace('T', ' ', $request->lstart_time ?? "");
  182. $lendTime = str_replace('T', ' ', $request->lend_time ?? "");
  183. $cstartTime = str_replace('T', ' ', $request->cstart_time ?? "");
  184. $cendTime = str_replace('T', ' ', $request->cend_time ?? "");
  185. $state = isset($request->state)?($request->state):-1;
  186. $admin_id = session('admin')->id;
  187. $list = (new Custom())->userNewList($admin_id, $gameID,$cstartTime, $cendTime,$startTime, $endTime, $lstartTime, $lendTime,$state);
  188. $callState = ['-1' =>'全部',0 => '等待召回', 1 => '已召回待激活', 2 => '激活'];
  189. $prize = 20;
  190. $prizeA = 50;
  191. $lastLogin = (new Custom())->userCallCount($admin_id,date('Y-m-01', strtotime('first day of last month')).' 00:00:00',date('Y-m-t', strtotime('last day of last month')).' 23:59:59',1);
  192. $lastActive = (new Custom())->userCallCount($admin_id,date('Y-m-01', strtotime('first day of last month')).' 00:00:00',date('Y-m-t', strtotime('last day of last month')).' 23:59:59',2);
  193. $lastPrize = $lastActive*$prizeA+$lastLogin*$prize;
  194. $currentLogin = (new Custom())->userCallCount($admin_id,date('Y-m-01').' 00:00:00',date('Y-m-t').' 23:59:59',1);
  195. $currentActive = (new Custom())->userCallCount($admin_id,date('Y-m-01').' 00:00:00',date('Y-m-t').' 23:59:59',2);
  196. $currentPrize = $currentActive*$prizeA+$currentLogin*$prize;
  197. foreach ($list as &$item){
  198. $item->mailStatus = (new Custom())->checkSend($item->UserID)?1:0;
  199. }
  200. return view('admin.custom.usernew', compact('list', 'gameID','cstartTime', 'cendTime','startTime', 'endTime','lstartTime','lendTime','callState','state','prize','lastPrize','currentPrize','prizeA'));
  201. }
  202. //用户列表
  203. public function userListAll(Request $request)
  204. {
  205. $gameID = (int)$request->GameID ?: "";
  206. $startTime = str_replace('T', ' ', $request->start_time ?? "");
  207. $endTime = str_replace('T', ' ', $request->end_time ?? "");
  208. $lstartTime = str_replace('T', ' ', $request->lstart_time ?? "");
  209. $lendTime = str_replace('T', ' ', $request->lend_time ?? "");
  210. $cstartTime = str_replace('T', ' ', $request->cstart_time ?? "");
  211. $cendTime = str_replace('T', ' ', $request->cend_time ?? "");
  212. $state = isset($request->state)?($request->state):-1;
  213. $admin_id = (int)$request->admin_id ?: "";;
  214. $list = (new Custom())->userNewList($admin_id, $gameID,$cstartTime, $cendTime,$startTime, $endTime, $lstartTime, $lendTime,$state);
  215. $callState = ['-1' =>'全部',0 => '等待召回', 1 => '已召回待激活', 2 => '激活'];
  216. $prize = 20;
  217. $prizeA = 50;
  218. $currentActive = (new Custom())->userCallCount($admin_id,$cstartTime,$cendTime);
  219. $currentLogin = (new Custom())->userCallCount($admin_id,$cstartTime,$cendTime,1);
  220. $currentPrize = $currentActive*$prizeA+$currentLogin*$prize;
  221. $adminName = DB::connection('write')->table('agent.dbo.admin_users')
  222. ->pluck('nickname', 'id')->toArray();
  223. $profit = (new Custom())->userCallProfit($admin_id,$cstartTime,$cendTime);
  224. $currentPay = $profit->total_recharge;
  225. $currentWithdraw = $profit->total_withdraw;
  226. // foreach ($list as $nItem){
  227. // if($nItem->call_state == 2){
  228. // $where = [];
  229. // $where[] = ['UserID',$nItem->UserID];
  230. // $where[] = ['pay_at', '>=', date('Y-m-d H:i:s', strtotime($nItem->CallbackDate))];
  231. //
  232. // $payTotalMoney = DB::connection('write')->table('agent.dbo.order')
  233. // ->where($where)->selectRaw('sum(amount) as amount')->first();
  234. //
  235. // $totalMoney = isset($payTotalMoney->amount) ? number_float($payTotalMoney->amount / NumConfig::NUM_VALUE) : 0;
  236. //
  237. // $nItem->pay = $totalMoney;
  238. // $currentPay+=$totalMoney;
  239. // } else{
  240. // $nItem->pay = 0;
  241. // }
  242. // }
  243. return view('admin.custom.userall', compact('list', 'gameID','cstartTime', 'cendTime','startTime', 'endTime','lstartTime','lendTime','callState','state','prize','adminName','currentPrize' ,'admin_id','prizeA','currentPay','currentWithdraw'));
  244. }
  245. public function follow($id){
  246. $list = DB::connection('read')->table(TableName::agent() . 'CallFollow')
  247. ->where('UserID', $id)
  248. ->select('UserID', 'f_type', 'admin_id', 'f_content', 'created')
  249. ->orderBy('ID','DESC')
  250. ->take(30)->get()->toArray();
  251. // <option value="1">what's app</option>
  252. // <option value="2">Email</option>
  253. // <option value="3">短信</option>
  254. // <option value="4">Telegram</option>
  255. // <option value="5">电话</option>
  256. $followType = [
  257. 1 => "What's App",
  258. 2 => "Email",
  259. 3 => "短信",
  260. 4 => "Telegram",
  261. 5 => "电话",
  262. ];
  263. $adminName = DB::connection('write')->table('agent.dbo.admin_users')
  264. ->pluck('nickname', 'id')->toArray();
  265. foreach ($list as &$val) {
  266. $val->admin = isset($adminName[$val->admin_id]) ? $adminName[$val->admin_id] : $val->admin_id;
  267. }
  268. //isset($adminName[$val->admin_id]) ? $adminName[$val->admin_id] : '';
  269. return view('admin.custom.list', compact('list', 'id','followType','adminName'));
  270. }
  271. public function followAdd(Request $request){
  272. $admin_id = session('admin')->id;
  273. $follow = [
  274. 'UserID' => $request->UserID,
  275. 'admin_id' => $admin_id,
  276. 'f_type' => $request->f_type,
  277. 'f_content' => $request->f_content,
  278. 'created' => time()
  279. ];
  280. DB::table(TableName::agent() . 'CallFollow')->insert($follow);
  281. return redirect('/admin/custom/follow/'.$request->UserID);
  282. }
  283. public function sendCallbackMail($UserID){
  284. $key = 'mail_callback_'.$UserID;
  285. $res = SetNXLock::getExclusiveLock($key, 5);
  286. if (!$res) {
  287. return apiReturnFail('操作频繁');
  288. }
  289. $mailCheck = (new Custom())->checkSend($UserID);
  290. if($mailCheck){
  291. return apiReturnFail('请勿重复发送');
  292. }
  293. $total = (new AccountsInfo())->accountTotalStatistics([$UserID]);
  294. $recharge = @$total[0]->Recharge ?? 0;
  295. $withdraw = @$total[0]->Withdraw ?? 0;
  296. $bonus = intval(($recharge*100-$withdraw)*0.1);
  297. if($bonus<2000){
  298. $bonus = 20*100;
  299. }
  300. if($bonus>50000){
  301. $bonus = 500*100;
  302. }
  303. $data = [
  304. 'MailType' => 2,
  305. 'MailStatus' => 1,
  306. 'UserID' => $UserID,
  307. 'CreateTime' => date('Y-m-d H:i:s', time()),
  308. 'TitleString' => 'Prêmio de feedback Super VIP',
  309. 'TextString' => 'Caro jogador,
  310. Feliz Ano Novo! Gostaríamos de agradecer o seu apoio ao nosso jogo de cassino. Você foi sorteado para receber um reembolso especial! Você receberá uma certa quantidade de moedas de ouro para que possa desfrutar de mais diversão e emoção no jogo.
  311. Desejamos-lhe um Feliz Ano Novo e muita diversão no jogo!
  312. Atenciosamente',
  313. 'BonusString' => '30000,'.$bonus,
  314. 'FromAgentID' => session('admin')->id,
  315. 'type' => 3,
  316. 'amount' => $bonus,
  317. 'admin_type' => 1
  318. ];
  319. DB::table('QPAccountsDB.dbo.PrivateMail')->insert($data);
  320. return apiReturnSuc();
  321. }
  322. }