MusicRepository.php 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: durong
  5. * Date: 2019/7/8
  6. * Time: 下午23:50
  7. */
  8. namespace App\Repositories;
  9. use Acekyd\LaravelMP3\LaravelMP3;
  10. use App\Models\PostMusic;
  11. use App\Models\PostMusicCategory;
  12. use App\Models\PostMusicCategoryRel;
  13. use App\Models\PostMusicUser;
  14. use Illuminate\Support\Facades\DB;
  15. use Symfony\Component\HttpKernel\Exception\HttpException;
  16. use Dingo\Api\Http\Response;
  17. use Illuminate\Database\QueryException;
  18. class MusicRepository
  19. {
  20. public function __construct(PostMusicCategoryRel $postMusicCategoryRel,PostMusicCategory $postMusicCategory,PostMusic $postMusic,PostMusicUser $postMusicUser)
  21. {
  22. $this->postMusicCategoryRel = $postMusicCategoryRel;
  23. $this->postMusicCategory = $postMusicCategory;
  24. $this->postMusic = $postMusic;
  25. $this->postMusicUser = $postMusicUser;
  26. }
  27. public function category_list($request)
  28. {
  29. $perPage = isset($request['per_page']) ? $request['per_page'] : 20;
  30. $where = [];
  31. if(isset($request['id'])){
  32. $where[] = ['id', '=', $request['id']];
  33. }
  34. return $this->postMusicCategory->where($where)->orderBy('sort', 'asc')->paginate($perPage);
  35. }
  36. public function categoryCreate($request)
  37. {
  38. if($this->postMusicCategory->where('name', $request['name'])->exists()){
  39. throw new HttpException(500, '该分类已经存在');
  40. }
  41. $data = [
  42. 'name' => $request['name'],
  43. 'is_open' => $request['is_open'] ?? 0,
  44. 'sort' => $request['sort'] ?? 999,
  45. ];
  46. if (!$this->postMusicCategory->create($data)) {
  47. throw new HttpException(500, '添加失败');
  48. }
  49. }
  50. public function categoryEdit($request)
  51. {
  52. $post_music_category = $this->postMusicCategory->where('id', $request['id'])->first();
  53. $post_music_category->name = $request['name'];
  54. $post_music_category->is_open = $request['is_open'] ?? 0;
  55. $post_music_category->sort = $request['sort'] ?? 999;
  56. $post_music_category->updated_at = date('Y-m-d H:i:s');
  57. $res = $post_music_category->save();
  58. if (!$res) {
  59. throw new HttpException(500, '音乐分类更新失败');
  60. }
  61. }
  62. public function editStatus($request)
  63. {
  64. $post_music_category = $this->postMusicCategory->find($request['id']);
  65. $post_music_category->is_open = $request['is_open'];
  66. $post_music_category->updated_at = date('Y-m-d H:i:s');
  67. $res = $post_music_category->save();
  68. if (!$res) {
  69. throw new HttpException(500, '修改状态失败');
  70. }
  71. }
  72. public function categoryDelete($request)
  73. {
  74. if ($this->postMusicCategoryRel->where('music_category_id',$request['id'])->exists()) {
  75. throw new HttpException(500, '当前分类下含有音乐,不能删除');
  76. }
  77. $post_music_category = $this->postMusicCategory->where('id', $request['id'])->first();
  78. $res = $post_music_category->delete();
  79. if (!$res){
  80. return Response::create([
  81. 'message' => '删除失败,请重试',
  82. 'status_code' => 500
  83. ]);
  84. }
  85. }
  86. public function musicList($request)
  87. {
  88. $perPage = isset($request['per_page']) ? $request['per_page'] : 20;
  89. $where = [];
  90. if(isset($request['id'])){
  91. $where[] = ['post_music_category_rel.id', '=', $request['id']];
  92. }
  93. if(isset($request['name'])){
  94. $where[] = ['post_music.name', 'like', "%{$request['name']}%"];
  95. }
  96. if(isset($request['category_id'])){
  97. $where[] = ['post_music_category.id', '=', $request['category_id']];
  98. }
  99. $postMusicList = $this->postMusicCategoryRel
  100. ->join('post_music_category', 'post_music_category.id', '=', 'post_music_category_rel.music_category_id')
  101. ->join('post_music', 'post_music.id', '=', 'post_music_category_rel.mid')
  102. ->select('post_music_category_rel.id','post_music_category_rel.sort','post_music.name','post_music.url','post_music.music_duration','post_music.created_at','post_music_category.name as category_name','post_music_category.id as category_id')
  103. ->where($where)
  104. ->orderBy('post_music_category_rel.sort', 'asc')
  105. ->paginate($perPage);
  106. return $postMusicList;
  107. }
  108. public function musicCreate($request)
  109. {
  110. $url = $request['url'];
  111. $data = [
  112. 'name' => $request['name'],
  113. 'url' => $url,
  114. 'music_duration' => $request['music_duration'],
  115. ];
  116. $date = date('Y-m-d H:i:s');
  117. DB::beginTransaction();
  118. try {
  119. $res = $this->postMusic->create($data);
  120. if ($res) {
  121. $mid = $res->id;
  122. $create_category_rel = [
  123. 'mid' => $mid,
  124. 'music_category_id' => $request['category_id'],
  125. 'sort' => $request['sort'] ?? 999,
  126. 'created_at' => $date,
  127. 'updated_at' => $date
  128. ];
  129. $result = $this->postMusicCategoryRel->insert($create_category_rel);
  130. if (!$result) {
  131. throw new HttpException(500, '音乐与分类关联-添加失败');
  132. }
  133. }
  134. DB::commit();
  135. return Response::create();
  136. } catch (QueryException $exception) {
  137. DB::rollBack();
  138. return Response::create([
  139. 'message' => '添加失败,请重试',
  140. 'error' => $exception->getMessage(),
  141. 'status_code' => 500
  142. ]);
  143. }
  144. }
  145. public function musicEdit($request)
  146. {
  147. $post_music_rel = $this->postMusicCategoryRel->select('mid')->where('id', $request['id'])->first();
  148. $post_music = $this->postMusic->where('id',$post_music_rel->mid)->first();
  149. if (!$post_music) {
  150. throw new HttpException(500, '没有找到对应的音乐');
  151. }
  152. $date = date('Y-m-d H:i:s');
  153. $post_music->name = $request['name'];
  154. $post_music->url = $request['url'];
  155. $post_music->music_duration = $request['music_duration'];
  156. $post_music->updated_at = $date;
  157. DB::beginTransaction();
  158. try{
  159. $res = $post_music->save();
  160. if ($res) {
  161. $create_category_rel = [
  162. 'mid' => $post_music->id,
  163. 'music_category_id' => $request['category_id'],
  164. 'sort' => $request['sort'] ?? 999,
  165. 'created_at' => $date,
  166. 'updated_at' => $date,
  167. ];
  168. $result = $this->postMusicCategoryRel->where('id',$request['id'])->update($create_category_rel);
  169. if (!$result){
  170. throw new HttpException(500, '音乐与分类关联-修改失败');
  171. }
  172. }
  173. DB::commit();
  174. return Response::create();
  175. }catch (QueryException $exception){
  176. DB::rollBack();
  177. return Response::create([
  178. 'message' => '修改失败,请重试',
  179. 'error' => $exception->getMessage(),
  180. 'status_code' => 500
  181. ]);
  182. }
  183. }
  184. public function musicDelete($request)
  185. {
  186. $post_music_rel = $this->postMusicCategoryRel->where('id', $request['id'])->first();
  187. DB::beginTransaction();
  188. try {
  189. $res = $post_music_rel->delete();
  190. if ($res) {
  191. $post_music = $this->postMusic->where('id',$post_music_rel->mid)->delete();
  192. if (!$post_music){
  193. throw new HttpException(500, '音乐删除失败');
  194. }
  195. }
  196. DB::commit();
  197. return Response::create();
  198. } catch (QueryException $exception) {
  199. DB::rollBack();
  200. return Response::create([
  201. 'message' => '删除失败,请重试',
  202. 'error' => $exception->getMessage(),
  203. 'status_code' => 500
  204. ]);
  205. }
  206. }
  207. public function userMusic($request)
  208. {
  209. $perPage = isset($request['per_page']) ? $request['per_page'] : 20;
  210. return $this->postMusicUser->orderBy('id', 'asc')->paginate($perPage);
  211. }
  212. }