Controller.php 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Http\Models\ReferralLog;
  4. use App\Http\Models\SensitiveWords;
  5. use App\Http\Models\UserBalanceLog;
  6. use App\Http\Models\UserScoreLog;
  7. use App\Http\Models\UserSubscribe;
  8. use Illuminate\Foundation\Bus\DispatchesJobs;
  9. use Illuminate\Routing\Controller as BaseController;
  10. use Illuminate\Foundation\Validation\ValidatesRequests;
  11. use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
  12. class Controller extends BaseController
  13. {
  14. use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
  15. // 生成随机密码
  16. public function makePasswd()
  17. {
  18. exit(makeRandStr());
  19. }
  20. // 生成VmessId
  21. public function makeVmessId()
  22. {
  23. exit(createGuid());
  24. }
  25. // 类似Linux中的tail命令
  26. public function tail($file, $n, $base = 5)
  27. {
  28. $fileLines = $this->countLine($file);
  29. if ($fileLines < 15000) {
  30. return false;
  31. }
  32. $fp = fopen($file, "r+");
  33. assert($n > 0);
  34. $pos = $n + 1;
  35. $lines = [];
  36. while (count($lines) <= $n) {
  37. try {
  38. fseek($fp, -$pos, SEEK_END);
  39. } catch (\Exception $e) {
  40. fseek(0);
  41. break;
  42. }
  43. $pos *= $base;
  44. while (!feof($fp)) {
  45. array_unshift($lines, fgets($fp));
  46. }
  47. }
  48. return array_slice($lines, 0, $n);
  49. }
  50. /**
  51. * 计算文件行数
  52. */
  53. public function countLine($file)
  54. {
  55. $fp = fopen($file, "r");
  56. $i = 0;
  57. while (!feof($fp)) {
  58. //每次读取2M
  59. if ($data = fread($fp, 1024 * 1024 * 2)) {
  60. //计算读取到的行数
  61. $num = substr_count($data, "\n");
  62. $i += $num;
  63. }
  64. }
  65. fclose($fp);
  66. return $i;
  67. }
  68. /**
  69. * 记录余额操作日志
  70. *
  71. * @param int $userId 用户ID
  72. * @param string $oid 订单ID
  73. * @param int $before 记录前余额
  74. * @param int $after 记录后余额
  75. * @param int $amount 发生金额
  76. * @param string $desc 描述
  77. *
  78. * @return int
  79. */
  80. public function addUserBalanceLog($userId, $oid, $before, $after, $amount, $desc = '')
  81. {
  82. $log = new UserBalanceLog();
  83. $log->user_id = $userId;
  84. $log->order_id = $oid;
  85. $log->before = $before;
  86. $log->after = $after;
  87. $log->amount = $amount;
  88. $log->desc = $desc;
  89. $log->created_at = date('Y-m-d H:i:s');
  90. return $log->save();
  91. }
  92. /**
  93. * 添加返利日志
  94. *
  95. * @param int $userId 用户ID
  96. * @param int $refUserId 返利用户ID
  97. * @param int $oid 订单ID
  98. * @param int $amount 发生金额
  99. * @param int $refAmount 返利金额
  100. *
  101. * @return int
  102. */
  103. public function addReferralLog($userId, $refUserId, $oid, $amount, $refAmount)
  104. {
  105. $log = new ReferralLog();
  106. $log->user_id = $userId;
  107. $log->ref_user_id = $refUserId;
  108. $log->order_id = $oid;
  109. $log->amount = $amount;
  110. $log->ref_amount = $refAmount;
  111. $log->status = 0;
  112. return $log->save();
  113. }
  114. /**
  115. * 添加积分日志
  116. *
  117. * @param int $userId 用户ID
  118. * @param int $before 记录前余额
  119. * @param int $after 记录后余额
  120. * @param int $score 发生值
  121. * @param string $desc 描述
  122. *
  123. * @return int
  124. */
  125. public function addUserScoreLog($userId, $before, $after, $score, $desc = '')
  126. {
  127. $log = new UserScoreLog();
  128. $log->user_id = $userId;
  129. $log->before = $before;
  130. $log->after = $after;
  131. $log->score = $score;
  132. $log->desc = $desc;
  133. $log->created_at = date('Y-m-d H:i:s');
  134. return $log->save();
  135. }
  136. // 获取敏感词
  137. public function sensitiveWords()
  138. {
  139. return SensitiveWords::query()->get()->pluck('words')->toArray();
  140. }
  141. // 将Base64图片转换为本地图片并保存
  142. function base64ImageSaver($base64_image_content)
  143. {
  144. // 匹配出图片的格式
  145. if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $base64_image_content, $result)) {
  146. $type = $result[2];
  147. $directory = date('Ymd');
  148. $path = '/assets/images/qrcode/' . $directory . '/';
  149. if (!file_exists(public_path($path))) { // 检查是否有该文件夹,如果没有就创建,并给予最高权限
  150. mkdir(public_path($path), 0755, true);
  151. }
  152. $fileName = makeRandStr(18, true) . ".{$type}";
  153. if (file_put_contents(public_path($path . $fileName), base64_decode(str_replace($result[1], '', $base64_image_content)))) {
  154. chmod(public_path($path . $fileName), 0744);
  155. return $path . $fileName;
  156. } else {
  157. return '';
  158. }
  159. } else {
  160. return '';
  161. }
  162. }
  163. }