AdvertiserController.php 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. <?php
  2. namespace Modules\Channel\Http\Controllers;
  3. use Catch\Base\CatchController;
  4. use Illuminate\Foundation\Validation\ValidatesRequests;
  5. use Illuminate\Http\Request;
  6. use Illuminate\Support\Facades\DB;
  7. use Modules\Channel\Exceptions\ChannelBusinessException;
  8. use Modules\Common\Errors\Errors;
  9. use Modules\User\Models\User;
  10. class AdvertiserController extends CatchController
  11. {
  12. use ValidatesRequests;
  13. public function __construct(
  14. protected readonly User $user
  15. ) {
  16. }
  17. /**
  18. * 添加投手
  19. * @param Request $request
  20. * @return int
  21. * @throws \Illuminate\Validation\ValidationException
  22. */
  23. public function addAdvertiser(Request $request) {
  24. $this->validate($request, [
  25. 'email' => 'required|email',
  26. 'username' => 'required',
  27. 'password' => 'required',
  28. 'repassword' => 'required|same:password',
  29. 'status' => 'required',
  30. 'remark' => 'string|max:140',
  31. 'miniProgramIds' => 'required|array|min:1',
  32. 'miniProgramIds.*' => 'required|integer'
  33. ]);
  34. $this->user->emailUnique($request->input('email'));
  35. // todo : 这里需要修改成投手角色的id
  36. $request['roles'] = [3];
  37. $this->user->storeBy($request->all());
  38. $this->user->pid = $this->getLoginUserId();
  39. $this->user->save();
  40. $insertData = [];
  41. $now = date('Y-m-d H:i:s');
  42. foreach ($request->input('miniProgramIds') as $miniProgramId) {
  43. $insertData[] = [
  44. 'uid' => $this->user->id,
  45. 'miniprogram_id' => $miniProgramId,
  46. 'created_at' => $now,
  47. 'updated_at' => $now,
  48. ];
  49. }
  50. DB::table('user_has_miniprograms')
  51. ->insert($insertData);
  52. return 1;
  53. }
  54. /**
  55. * 投手账号列表
  56. * @param Request $request
  57. * @return \Illuminate\Contracts\Pagination\LengthAwarePaginator
  58. * @throws \Illuminate\Validation\ValidationException
  59. */
  60. public function listAdvertiser(Request $request) {
  61. $this->validate($request, [
  62. 'email' => 'string|email',
  63. 'username' => 'string',
  64. 'miniProgramId' => 'integer',
  65. ]);
  66. $miniProgramId = $request->input('miniProgramId');
  67. $email = $request->input('email');
  68. $username = $request->input('username');
  69. return DB::table('users')
  70. ->join('user_has_miniprograms', 'users.id', 'user_has_miniprograms.uid')
  71. ->where([
  72. 'user_has_miniprograms.is_enabled' => 1,
  73. 'users.deleted_at' => 0,
  74. 'users.pid' => $this->getLoginUserId()
  75. ])->when($email, function ($query, $email) {
  76. return $query->where('users.email', $email);
  77. })->when($miniProgramId, function ($query, $miniProgramId){
  78. return $query->where('user_has_miniprograms.miniprogram_id', $miniProgramId);
  79. })->when($username, function ($query, $username){
  80. return $query->where('users.username', 'like', '%'.$username.'%');
  81. })
  82. ->select(
  83. 'users.id', 'users.username', 'users.email', 'users.status',
  84. DB::raw("from_unixtime(users.created_at) as created_at"),
  85. DB::raw("group_concat(distinct user_has_miniprograms.miniprogram_id separator ',') as miniProgramIds")
  86. )->groupBy('users.id')
  87. ->orderBy('users.id','desc')
  88. ->paginate($request->input('per_page', 15));
  89. }
  90. /**
  91. * 更新账号
  92. * @param Request $request
  93. * @return int
  94. * @throws \Illuminate\Validation\ValidationException
  95. */
  96. public function updateAdvertiser(Request $request) {
  97. $this->validate($request, [
  98. 'id' => 'required',
  99. 'username' => 'required',
  100. 'miniProgramIds' => 'required|array|min:1',
  101. 'miniProgramIds.*' => 'required|integer',
  102. 'status' => 'required',
  103. 'remark' => 'string|max:140',
  104. ]);
  105. $this->user->updateBy($request->input('id'), $request->all());
  106. $now = date('Y-m-d H:i:s');
  107. DB::table('user_has_miniprograms')
  108. ->where([
  109. 'uid' => $this->user->id,
  110. 'is_enabled' => 1
  111. ])->update([
  112. 'is_enabled' => 0,
  113. 'updated_at' => $now,
  114. ]);
  115. $insertData = [];
  116. foreach ($request->input('miniProgramIds') as $miniProgramId) {
  117. $insertData[] = [
  118. 'uid' => $this->user->id,
  119. 'miniprogram_id' => $miniProgramId,
  120. 'created_at' => $now,
  121. 'updated_at' => $now,
  122. ];
  123. }
  124. DB::table('user_has_miniprograms')
  125. ->insert($insertData);
  126. return 1;
  127. }
  128. /**
  129. * 获取投手信息
  130. * @param Request $request
  131. * @return \Illuminate\Database\Eloquent\Model|\Illuminate\Database\Query\Builder|object|null
  132. * @throws \Illuminate\Validation\ValidationException
  133. */
  134. public function getAdvertiser(Request $request) {
  135. $this->validate($request, [
  136. 'id' => 'required'
  137. ]);
  138. $user = DB::table('users')
  139. ->where([
  140. 'deleted_at' => 0,
  141. 'id' => $request->input('id')
  142. ])->select('id','email', 'username', 'status', 'remark')
  143. ->first();
  144. if(!$user) {
  145. ChannelBusinessException::throwError(Errors::USER_NOT_FOUND);
  146. }
  147. $miniProgramIds = DB::table('user_has_miniprograms')
  148. ->where([
  149. 'is_enabled' => 1,
  150. 'uid' => $user->id,
  151. ])->select('miniprogram_id')
  152. ->get()->pluck('miniprogram_id')->toArray();
  153. $user->miniProgramIds = $miniProgramIds;
  154. return $user;
  155. }
  156. }