Controller.php 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  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 App\Http\Models\UserTrafficModifyLog;
  9. use Illuminate\Foundation\Bus\DispatchesJobs;
  10. use Illuminate\Routing\Controller as BaseController;
  11. use Illuminate\Foundation\Validation\ValidatesRequests;
  12. use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
  13. class Controller extends BaseController
  14. {
  15. use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
  16. // 生成订阅地址的唯一码
  17. public function makeSubscribeCode()
  18. {
  19. $code = makeRandStr(5);
  20. if (UserSubscribe::query()->where('code', $code)->exists()) {
  21. $code = $this->makeSubscribeCode();
  22. }
  23. return $code;
  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 string $oid 订单ID
  97. * @param int $before 记录前的值
  98. * @param int $after 记录后的值
  99. * @param string $desc 描述
  100. *
  101. * @return int
  102. */
  103. public function addUserTrafficModifyLog($userId, $oid, $before, $after, $desc = '')
  104. {
  105. $log = new UserTrafficModifyLog();
  106. $log->user_id = $userId;
  107. $log->order_id = $oid;
  108. $log->before = $before;
  109. $log->after = $after;
  110. $log->desc = $desc;
  111. return $log->save();
  112. }
  113. /**
  114. * 添加返利日志
  115. *
  116. * @param int $userId 用户ID
  117. * @param int $refUserId 返利用户ID
  118. * @param int $oid 订单ID
  119. * @param int $amount 发生金额
  120. * @param int $refAmount 返利金额
  121. *
  122. * @return int
  123. */
  124. public function addReferralLog($userId, $refUserId, $oid, $amount, $refAmount)
  125. {
  126. $log = new ReferralLog();
  127. $log->user_id = $userId;
  128. $log->ref_user_id = $refUserId;
  129. $log->order_id = $oid;
  130. $log->amount = $amount;
  131. $log->ref_amount = $refAmount;
  132. $log->status = 0;
  133. return $log->save();
  134. }
  135. /**
  136. * 添加积分日志
  137. *
  138. * @param int $userId 用户ID
  139. * @param int $before 记录前余额
  140. * @param int $after 记录后余额
  141. * @param int $score 发生值
  142. * @param string $desc 描述
  143. *
  144. * @return int
  145. */
  146. public function addUserScoreLog($userId, $before, $after, $score, $desc = '')
  147. {
  148. $log = new UserScoreLog();
  149. $log->user_id = $userId;
  150. $log->before = $before;
  151. $log->after = $after;
  152. $log->score = $score;
  153. $log->desc = $desc;
  154. $log->created_at = date('Y-m-d H:i:s');
  155. return $log->save();
  156. }
  157. // 获取敏感词
  158. public function sensitiveWords()
  159. {
  160. return SensitiveWords::query()->get()->pluck('words')->toArray();
  161. }
  162. // 将Base64图片转换为本地图片并保存
  163. function base64ImageSaver($base64_image_content)
  164. {
  165. // 匹配出图片的格式
  166. if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $base64_image_content, $result)) {
  167. $type = $result[2];
  168. $directory = date('Ymd');
  169. $path = '/assets/images/qrcode/' . $directory . '/';
  170. if (!file_exists(public_path($path))) { // 检查是否有该文件夹,如果没有就创建,并给予最高权限
  171. mkdir(public_path($path), 0755, true);
  172. }
  173. $fileName = makeRandStr(18, true) . ".{$type}";
  174. if (file_put_contents(public_path($path . $fileName), base64_decode(str_replace($result[1], '', $base64_image_content)))) {
  175. chmod(public_path($path . $fileName), 0744);
  176. return $path . $fileName;
  177. } else {
  178. return '';
  179. }
  180. } else {
  181. return '';
  182. }
  183. }
  184. }