Home.php 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314
  1. <?php
  2. namespace App\Http\Controllers\admin;
  3. use App\Support\StatsScope;
  4. use App\Constants\HttpStatus;
  5. use App\Http\Controllers\Controller;
  6. use App\Models\PaymentOrder;
  7. use App\Models\Recharge;
  8. use App\Models\User;
  9. use App\Models\BalanceLog;
  10. use App\Services\ThirdGameBalanceService;
  11. use Illuminate\Validation\ValidationException;
  12. use Exception;
  13. use Carbon\Carbon;
  14. use App\Models\Withdraw;
  15. class Home extends Controller
  16. {
  17. public function thirdGameBalance(ThirdGameBalanceService $service)
  18. {
  19. return $this->success($service->merchantBalance());
  20. }
  21. public function index()
  22. {
  23. try {
  24. request()->validate([
  25. 'start_date' => ['nullable', 'date_format:Y-m-d'],
  26. 'end_date' => ['nullable', 'date_format:Y-m-d', 'after_or_equal:start_date'],
  27. ]);
  28. $start = request()->input('start_date');
  29. $end = request()->input('end_date');
  30. if (empty($end)) $end = date('Y-m-d');
  31. if (empty($start)) $start = date('Y-m-d');
  32. $end = Carbon::createFromFormat('Y-m-d', $end)->addDay()->format('Y-m-d');
  33. $today = date('Y-m-d');
  34. //投注统计
  35. $query = BalanceLog::leftJoin('users', 'users.member_id', '=', 'balance_logs.member_id');
  36. $query->where('balance_logs.type', 1)->where('balance_logs.change_type', 'like', '%投注');
  37. StatsScope::realUsers($query, 'users'); // 游客、模拟会员、测试代理名下会员不统计
  38. $query1 = clone $query;
  39. $bet['amount'] = (float)$query1->whereBetween('balance_logs.created_at', [$start, $end])->sum('amount');//投注金额
  40. $bet['amount'] = abs($bet['amount']);
  41. $query1 = clone $query;
  42. $bet['today_amount'] = (float)$query1->whereBetween('balance_logs.created_at', [$today, $end])->sum('amount');//今日投注金额
  43. $bet['today_amount'] = abs($bet['today_amount']);
  44. //投注统计
  45. $query = BalanceLog::leftJoin('users', 'users.member_id', '=', 'balance_logs.member_id');
  46. $query->where('balance_logs.type', 1)->where('balance_logs.change_type', 'like', '%投注');
  47. StatsScope::guestUsers($query, 'users'); // 游客(不含后台模拟会员)
  48. $query1 = clone $query;
  49. $virtual_bet['amount'] = (float)$query1->whereBetween('balance_logs.created_at', [$start, $end])->sum('amount');//投注金额
  50. $virtual_bet['amount'] = abs($virtual_bet['amount']);
  51. $query1 = clone $query;
  52. $virtual_bet['today_amount'] = (float)$query1->whereBetween('balance_logs.created_at', [$today, $end])->sum('amount');//今日投注金额
  53. $virtual_bet['today_amount'] = abs($virtual_bet['today_amount']);
  54. //投注退款统计
  55. $query = BalanceLog::leftJoin('users', 'users.member_id', '=', 'balance_logs.member_id');
  56. $query->where('balance_logs.type', 1)->where('balance_logs.change_type', 'like', '%退款');
  57. StatsScope::realUsers($query, 'users'); // 游客、模拟会员、测试代理名下会员不统计
  58. $query1 = clone $query;
  59. $bet['refund_amount'] = (float)$query1->whereBetween('balance_logs.created_at', [$start, $end])->sum('amount');//投注退款金额
  60. $query1 = clone $query;
  61. $bet['today_refund_amount'] = (float)$query1->whereBetween('balance_logs.created_at', [$today, $end])->sum('amount');//今日投注退款金额
  62. //投注退款统计
  63. $query = BalanceLog::leftJoin('users', 'users.member_id', '=', 'balance_logs.member_id');
  64. $query->where('balance_logs.type', 1)->where('balance_logs.change_type', 'like', '%退款');
  65. StatsScope::guestUsers($query, 'users'); // 游客(不含后台模拟会员)
  66. $query1 = clone $query;
  67. $virtual_bet['refund_amount'] = (float)$query1->whereBetween('balance_logs.created_at', [$start, $end])->sum('amount');//投注退款金额
  68. $query1 = clone $query;
  69. $virtual_bet['today_refund_amount'] = (float)$query1->whereBetween('balance_logs.created_at', [$today, $end])->sum('amount');//今日投注退款金额
  70. //投注中奖统计
  71. $query = BalanceLog::leftJoin('users', 'users.member_id', '=', 'balance_logs.member_id');
  72. $query->where('balance_logs.type', 1)->where('balance_logs.change_type', 'like', '%中奖');
  73. StatsScope::realUsers($query, 'users'); // 游客、模拟会员、测试代理名下会员不统计
  74. $query1 = clone $query;
  75. $bet['win_amount'] = (float)$query1->whereBetween('balance_logs.created_at', [$start, $end])->sum('amount');//投注中奖金额
  76. $query1 = clone $query;
  77. $bet['today_win_amount'] = (float)$query1->whereBetween('balance_logs.created_at', [$today, $end])->sum('amount');//今日投注中奖金额
  78. //投注中奖统计
  79. $query = BalanceLog::leftJoin('users', 'users.member_id', '=', 'balance_logs.member_id');
  80. $query->where('balance_logs.type', 1)->where('balance_logs.change_type', 'like', '%中奖');
  81. StatsScope::guestUsers($query, 'users'); // 游客(不含后台模拟会员)
  82. $query1 = clone $query;
  83. $virtual_bet['win_amount'] = (float)$query1->whereBetween('balance_logs.created_at', [$start, $end])->sum('amount');//投注中奖金额
  84. $query1 = clone $query;
  85. $virtual_bet['today_win_amount'] = (float)$query1->whereBetween('balance_logs.created_at', [$today, $end])->sum('amount');//今日投注中奖金额
  86. //余额宝统计
  87. $query = StatsScope::excludeTestMembers(BalanceLog::query());
  88. $yuebao['in_amount'] = (float)$query->where('change_type', '余额宝转入')->whereBetween('created_at', [$start, $end])->sum('amount');//余额宝转入金额
  89. $yuebao['in_amount'] = abs($yuebao['in_amount']);
  90. $yuebao['today_in_amount'] = (float)$query->where('change_type', '余额宝转入')->whereBetween('created_at', [$today, $end])->sum('amount');//今日余额宝转入金额
  91. $yuebao['today_in_amount'] = abs($yuebao['today_in_amount']);
  92. $yuebao['out_amount'] = (float)$query->where('change_type', '余额宝转出')->whereBetween('created_at', [$start, $end])->sum('amount');//余额宝转出金额
  93. $yuebao['out_amount'] = abs($yuebao['out_amount']);
  94. $yuebao['today_out_amount'] = (float)$query->where('change_type', '余额宝转出')->whereBetween('created_at', [$today, $end])->sum('amount');//今日余额宝转出金额
  95. $yuebao['today_out_amount'] = abs($yuebao['today_out_amount']);
  96. $yuebao['interest_amount'] = (float)$query->where('change_type', '余额宝利息')->whereBetween('created_at', [$start, $end])->sum('amount');//余额宝利息
  97. $yuebao['today_interest_amount'] = (float)$query->where('change_type', '余额宝利息')->whereBetween('created_at', [$today, $end])->sum('amount');//今日余额宝利息
  98. //老用户回归返彩金额
  99. $activity['user_return'] = (float)$query->where('change_type', '老用户回归')->whereBetween('created_at', [$start, $end])->sum('amount');//老用户回归返彩金额
  100. $activity['today_user_return'] = (float)$query->where('change_type', '老用户回归')->whereBetween('created_at', [$today, $end])->sum('amount');//今日老用户回归返彩金额
  101. //即充即送返彩金额
  102. $activity['recharge_frozen'] = (float)$query->where('change_type', '即充即送')->whereBetween('created_at', [$start, $end])->sum('amount');//即充即送返彩金额
  103. $activity['today_recharge_frozen'] = (float)$query->where('change_type', '即充即送')->whereBetween('created_at', [$today, $end])->sum('amount');//今日即充即送返彩金额
  104. //充值返现金额
  105. $activity['recharge_amount'] = (float)$query->where('change_type', '充值返现')->whereBetween('created_at', [$start, $end])->sum('amount');//充值返现金额
  106. $activity['today_recharge_amount'] = (float)$query->where('change_type', '充值返现')->whereBetween('created_at', [$today, $end])->sum('amount');//今日充值返现金额
  107. //流水解冻金额
  108. $activity['unfreeze_amount'] = (float)$query->where('change_type', '流水解冻')->whereBetween('created_at', [$start, $end])->sum('amount');//流水解冻金额
  109. $activity['unfreeze_amount'] = abs($activity['unfreeze_amount']);
  110. $activity['today_unfreeze_amount'] = (float)$query->where('change_type', '流水解冻')->whereBetween('created_at', [$today, $end])->sum('amount');//今日流水解冻金额
  111. $activity['today_unfreeze_amount'] = abs($activity['today_unfreeze_amount']);
  112. //新增会员统计
  113. $query = StatsScope::realUsers(User::query(), 'users');
  114. $totalUser = (float)$query->whereBetween('created_at', [$start, $end])->count('id');
  115. $todayUser = (float)$query->whereBetween('created_at', [$today, $end])->count('id');//今日新增会员
  116. //新增会员统计
  117. $query = StatsScope::guestUsers(User::query(), 'users');
  118. $totalVirtualUser = (float)$query->whereBetween('created_at', [$start, $end])->count('id');
  119. $todayVirtualUser = (float)$query->whereBetween('created_at', [$today, $end])->count('id');//今日新增会员
  120. //第三方提现统计(RMB)
  121. $query = StatsScope::excludeTestMembers(PaymentOrder::query());
  122. $query->whereBetween('created_at', [$start, $end]);
  123. $query1 = clone $query;
  124. $totalAmount = (float)$query1->where('type', 2)->sum('amount');
  125. $query1 = clone $query;
  126. $totalPending = (float)$query1->where('type', 2)->where('status', 0)->sum('amount');//待处理
  127. $query1 = clone $query;
  128. $totalProcessing = (float)$query1->where('type', 2)->where('status', 1)->sum('amount');//处理中
  129. $query1 = clone $query;
  130. $totalSuccess = (float)$query1->where('type', 2)->where('status', 2)->sum('amount');//成功
  131. $query1 = clone $query;
  132. $totalFail = (float)$query1->where('type', 2)->where('status', 3)->sum('amount'); // 失败
  133. //第三方提现统计(RMB)今日
  134. $query = StatsScope::excludeTestMembers(PaymentOrder::query());
  135. $query->whereBetween('created_at', [$today, $end]);
  136. $query1 = clone $query;
  137. $todayAmount = (float)$query1->where('type', 2)->sum('amount');
  138. $query1 = clone $query;
  139. $todayPending = (float)$query1->where('type', 2)->where('status', 0)->sum('amount');//待处理
  140. $query1 = clone $query;
  141. $todayProcessing = (float)$query1->where('type', 2)->where('status', 1)->sum('amount');//处理中
  142. $query1 = clone $query;
  143. $todaySuccess = (float)$query1->where('type', 2)->where('status', 2)->sum('amount');//成功
  144. $query1 = clone $query;
  145. $todayFail = (float)$query1->where('type', 2)->where('status', 3)->sum('amount'); // 失败
  146. //第三方充值统计(RMB)
  147. $query1 = clone $query;
  148. $rechargeRmbTotalAmount = (float)$query1->where('type', 1)->sum('amount');//总金额
  149. $query1 = clone $query;
  150. $rechargeRmbTotalPending = (float)$query1->where('type', 1)->where('status', 0)->sum('amount');//待处理
  151. $query1 = clone $query;
  152. $rechargeRmbTotalProcessing = (float)$query1->where('type', 1)->where('status', 1)->sum('amount');//处理中
  153. $query1 = clone $query;
  154. $rechargeRmbTotalSuccess = (float)$query1->where('type', 1)->where('status', 2)->sum('amount');//成功
  155. $query1 = clone $query;
  156. $rechargeRmbTotalFail = (float)$query1->where('type', 1)->where('status', 3)->sum('amount');//失败
  157. //第三方充值统计(RMB)今日
  158. $query1 = clone $query;
  159. $rechargeRmbTodayAmount = (float)$query1->where('type', 1)->sum('amount');//总金额
  160. $query1 = clone $query;
  161. $rechargeRmbTodayPending = (float)$query1->where('type', 1)->where('status', 0)->sum('amount');//待处理
  162. $query1 = clone $query;
  163. $rechargeRmbTodayProcessing = (float)$query1->where('type', 1)->where('status', 1)->sum('amount');//处理中
  164. $query1 = clone $query;
  165. $rechargeRmbTodaySuccess = (float)$query1->where('type', 1)->where('status', 2)->sum('amount');//成功
  166. $query1 = clone $query;
  167. $rechargeRmbTodayFail = (float)$query1->where('type', 1)->where('status', 3)->sum('amount');//失败
  168. //USDT提现统计
  169. $query = StatsScope::excludeTestMembers(Withdraw::query());
  170. $query->whereBetween('created_at', [$start, $end]);
  171. $query1 = clone $query;
  172. $usdTotalAmount = (float)$query1->sum('amount');//总金额
  173. $query1 = clone $query;
  174. $usdTotalSuccess = (float)$query1->where('status', 1)->sum('amount');//成功
  175. $query1 = clone $query;
  176. $usdTotalFail = (float)$query1->where('status', 2)->sum('amount');//失败
  177. //USDT提现统计(今日)
  178. $query = StatsScope::excludeTestMembers(Withdraw::query());
  179. $query->whereBetween('created_at', [$today, $end]);
  180. $query1 = clone $query;
  181. $usdTodayAmount = (float)$query1->sum('amount');//总金额
  182. $query1 = clone $query;
  183. $usdTodaySuccess = (float)$query1->where('status', 1)->sum('amount');//成功
  184. $query1 = clone $query;
  185. $usdTodayFail = (float)$query1->where('status', 2)->sum('amount');//失败
  186. //USDT提现统计(今日)
  187. $query = StatsScope::excludeTestMembers(Withdraw::query());
  188. $query->whereBetween('created_at', [$today, $end]);
  189. $query1 = clone $query;
  190. $usdTodayAmount = (float)$query1->sum('amount');//总金额
  191. $query1 = clone $query;
  192. $usdTodaySuccess = (float)$query1->where('status', 1)->sum('amount');//成功
  193. $query1 = clone $query;
  194. $usdTodayFail = (float)$query1->where('status', 2)->sum('amount');//失败
  195. //USDT充值统计
  196. $query = StatsScope::excludeTestMembers(Recharge::query());
  197. $query->whereBetween('created_at', [$start, $end]);
  198. $query1 = clone $query;
  199. $rechargeTotalAmount = (float)$query1->sum('amount');//总充值
  200. $query1 = clone $query;
  201. $rechargeTotalSuccess = (float)$query1->where('status', 1)->sum('amount');//成功
  202. $query1 = clone $query;
  203. $rechargeTotalFail = (float)$query1->where('status', 2)->sum('amount');//失败
  204. //USDT充值(今日)
  205. $query = StatsScope::excludeTestMembers(Recharge::query());
  206. $query->whereBetween('created_at', [$today, $end]);
  207. $query1 = clone $query;
  208. $rechargeTodayAmount = (float)$query1->sum('amount');//总充值
  209. $query1 = clone $query;
  210. $rechargeTodaySuccess = (float)$query1->where('status', 1)->sum('amount');//成功
  211. $query1 = clone $query;
  212. $rechargeTodayFail = (float)$query1->where('status', 2)->sum('amount');//失败
  213. $result = [
  214. 'start' => $start,
  215. 'end' => $end,
  216. 'bet' => $bet,//投注相关的
  217. 'virtual_bet' => $virtual_bet,//虚拟投注相关的
  218. 'activity' => $activity,//活动相关的
  219. 'yuebao' => $yuebao,//余额宝相关的
  220. 'recharge_usd' => [
  221. 'total_amount' => $rechargeTotalAmount,
  222. 'total_success' => $rechargeTotalSuccess,
  223. 'total_fail' => $rechargeTotalFail,
  224. 'today_amount' => $rechargeTodayAmount,
  225. 'today_success' => $rechargeTodaySuccess,
  226. 'today_fail' => $rechargeTodayFail,
  227. ],
  228. 'recharge_rmb' => [
  229. 'total_amount' => $rechargeRmbTotalAmount,
  230. 'total_success' => $rechargeRmbTotalSuccess,
  231. 'total_fail' => $rechargeRmbTotalFail,
  232. 'total_processing' => $rechargeRmbTotalProcessing,
  233. 'total_pending' => $rechargeRmbTotalPending,
  234. 'today_amount' => $rechargeRmbTodayAmount,
  235. 'today_success' => $rechargeRmbTodaySuccess,
  236. 'today_fail' => $rechargeRmbTodayFail,
  237. 'today_processing' => $rechargeRmbTodayProcessing,
  238. 'today_pending' => $rechargeRmbTodayPending,
  239. ],
  240. 'withdraw_usdt' => [
  241. 'total_fail' => $usdTotalFail,
  242. 'total_success' => $usdTotalSuccess,
  243. 'total_amount' => $usdTotalAmount,
  244. 'today_amount' => $usdTodayAmount,
  245. 'today_success' => $usdTodaySuccess,
  246. 'today_fail' => $usdTodayFail,
  247. ],
  248. 'withdraw_rmb' => [
  249. 'total_fail' => $totalFail,
  250. 'total_success' => $totalSuccess,
  251. 'total_amount' => $totalAmount,
  252. 'total_processing' => $totalProcessing,
  253. 'total_pending' => $totalPending,
  254. 'today_amount' => $todayAmount,
  255. 'today_success' => $todaySuccess,
  256. 'today_fail' => $todayFail,
  257. 'today_processing' => $todayProcessing,
  258. 'today_pending' => $todayPending,
  259. ],
  260. 'total_user' => $totalUser,
  261. 'today_user' => $todayUser,
  262. 'total_virtual_user' => $totalVirtualUser,
  263. 'today_virtual_user' => $todayVirtualUser,
  264. ];
  265. } catch (ValidationException $e) {
  266. return $this->error(HttpStatus::CUSTOM_ERROR, $e->validator->errors()->first());
  267. } catch (Exception $e) {
  268. return $this->error($e->getCode(), $e->getmessage());
  269. }
  270. return $this->success($result);
  271. }
  272. }