1
0

UserController.php 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. <?php
  2. namespace App\Http\Controllers\Muv2;
  3. use App\Http\Controllers\Controller;
  4. use App\Http\Models\SsNode;
  5. use App\Http\Models\SsNodeInfo;
  6. use App\Http\Models\SsNodeLabel;
  7. use App\Http\Models\SsNodeOnlineLog;
  8. use App\Http\Models\User;
  9. use App\Http\Models\UserLabel;
  10. use App\Http\Models\UserTrafficLog;
  11. use Illuminate\Http\Request;
  12. use Response;
  13. class UserController extends Controller
  14. {
  15. //用户列表
  16. public function index()
  17. {
  18. $users= User::query()->where('enable',1)->select(
  19. "id","username","passwd","t","u","d","transfer_enable",
  20. "port","protocol","obfs","enable","expire_time as expire_time_d","method",
  21. "v2ray_uuid","v2ray_level","v2ray_alter_id")
  22. ->get();
  23. foreach($users as $user){
  24. //datetime 转timestamp
  25. $user['switch']=1;
  26. $user['email']=$user['username'];
  27. $user['expire_time']=strval((new \DateTime($user['expire_time_d']))->getTimestamp());
  28. }
  29. $res = [
  30. "data" => $users
  31. ];
  32. return response()->json($res);
  33. }
  34. //更新流量到user表
  35. public function addTraffic(Request $request, $response, $args)
  36. {
  37. $id = $request->route('id');
  38. $u = $request->get('u');
  39. $d = $request->get('d');
  40. $nodeId = $request->get('node_id');
  41. $node = SsNode::query()->find($nodeId)->get();
  42. $rate = $node->traffic_rate;
  43. $user = User::query()->find($id)->get();
  44. $user->t = time();
  45. $user->u = $user->u + ($u * $rate);
  46. $user->d = $user->d + ($d * $rate);
  47. if (!$user->save()) {
  48. $res = [
  49. "msg" => "update failed",
  50. ];
  51. return response()->json($res,400);
  52. }
  53. // 写usertrafficlog
  54. $totalTraffic = self::flowAutoShow(($u + $d) * $rate);
  55. $traffic = new UserTrafficLog();
  56. $traffic->user_id = $id;
  57. $traffic->u = $u;
  58. $traffic->d = $d;
  59. $traffic->node_id = $nodeId;
  60. $traffic->rate = $rate;
  61. $traffic->traffic = $totalTraffic;
  62. $traffic->log_time = time();
  63. $traffic->save();
  64. $res = [
  65. 'ret' => 1,
  66. "msg" => "ok",
  67. ];
  68. return response()->json($res);
  69. }
  70. /**
  71. * 根据流量值自动转换单位输出
  72. * @param int $value
  73. * @return string
  74. */
  75. public static function flowAutoShow($value = 0)
  76. {
  77. $kb = 1024;
  78. $mb = 1048576;
  79. $gb = 1073741824;
  80. $tb = $gb * 1024;
  81. $pb = $tb * 1024;
  82. if (abs($value) > $pb) {
  83. return round($value / $pb, 2) . "PB";
  84. } elseif (abs($value) > $tb) {
  85. return round($value / $tb, 2) . "TB";
  86. } elseif (abs($value) > $gb) {
  87. return round($value / $gb, 2) . "GB";
  88. } elseif (abs($value) > $mb) {
  89. return round($value / $mb, 2) . "MB";
  90. } elseif (abs($value) > $kb) {
  91. return round($value / $kb, 2) . "KB";
  92. } else {
  93. return round($value, 2) . "B";
  94. }
  95. }
  96. }