MusicRepository.php 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248
  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. if($this->postMusicCategory->where('name', $request['name'])->exists()){
  53. throw new HttpException(500, '该分类已经存在');
  54. }
  55. $post_music_category = $this->postMusicCategory->where('id', $request['id'])->first();
  56. $post_music_category->name = $request['name'];
  57. $post_music_category->is_open = $request['is_open'] ?? 0;
  58. $post_music_category->sort = $request['sort'] ?? 999;
  59. $post_music_category->updated_at = date('Y-m-d H:i:s');
  60. $res = $post_music_category->save();
  61. if (!$res) {
  62. throw new HttpException(500, '音乐分类更新失败');
  63. }
  64. }
  65. public function editStatus($request)
  66. {
  67. $post_music_category = $this->postMusicCategory->find($request['id']);
  68. $post_music_category->is_open = $request['is_open'];
  69. $post_music_category->updated_at = date('Y-m-d H:i:s');
  70. $res = $post_music_category->save();
  71. if (!$res) {
  72. throw new HttpException(500, '修改状态失败');
  73. }
  74. }
  75. public function categoryDelete($request)
  76. {
  77. if ($this->postMusicCategoryRel->where('music_category_id',$request['id'])->exists()) {
  78. throw new HttpException(500, '当前分类下含有音乐,不能删除');
  79. }
  80. $post_music_category = $this->postMusicCategory->where('id', $request['id'])->first();
  81. $res = $post_music_category->delete();
  82. if (!$res){
  83. return Response::create([
  84. 'message' => '删除失败,请重试',
  85. 'status_code' => 500
  86. ]);
  87. }
  88. }
  89. public function musicList($request)
  90. {
  91. $perPage = isset($request['per_page']) ? $request['per_page'] : 20;
  92. $where = [];
  93. if(isset($request['id'])){
  94. $where[] = ['post_music_category_rel.id', '=', $request['id']];
  95. }
  96. if(isset($request['name'])){
  97. $where[] = ['post_music.name', 'like', "%{$request['name']}%"];
  98. }
  99. if(isset($request['category_id'])){
  100. $where[] = ['post_music_category.id', '=', $request['category_id']];
  101. }
  102. $postMusicList = $this->postMusicCategoryRel
  103. ->join('post_music_category', 'post_music_category.id', '=', 'post_music_category_rel.music_category_id')
  104. ->join('post_music', 'post_music.id', '=', 'post_music_category_rel.mid')
  105. ->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')
  106. ->where($where)
  107. ->orderBy('post_music_category_rel.sort', 'asc')
  108. ->paginate($perPage);
  109. return $postMusicList;
  110. }
  111. public function musicCreate($request)
  112. {
  113. $url = $request['url'];
  114. $data = [
  115. 'name' => $request['name'],
  116. 'url' => $url,
  117. 'music_duration' => $request['music_duration'],
  118. ];
  119. $date = date('Y-m-d H:i:s');
  120. DB::beginTransaction();
  121. try {
  122. $res = $this->postMusic->create($data);
  123. if ($res) {
  124. $mid = $res->id;
  125. $create_category_rel = [
  126. 'mid' => $mid,
  127. 'music_category_id' => $request['category_id'],
  128. 'sort' => $request['sort'] ?? 999,
  129. 'created_at' => $date,
  130. 'updated_at' => $date
  131. ];
  132. $result = $this->postMusicCategoryRel->insert($create_category_rel);
  133. if (!$result) {
  134. throw new HttpException(500, '音乐与分类关联-添加失败');
  135. }
  136. }
  137. DB::commit();
  138. return Response::create();
  139. } catch (QueryException $exception) {
  140. DB::rollBack();
  141. return Response::create([
  142. 'message' => '添加失败,请重试',
  143. 'error' => $exception->getMessage(),
  144. 'status_code' => 500
  145. ]);
  146. }
  147. }
  148. public function musicEdit($request)
  149. {
  150. $post_music_rel = $this->postMusicCategoryRel->select('mid')->where('id', $request['id'])->first();
  151. $post_music = $this->postMusic->where('id',$post_music_rel->mid)->first();
  152. if (!$post_music) {
  153. throw new HttpException(500, '没有找到对应的音乐');
  154. }
  155. $date = date('Y-m-d H:i:s');
  156. $post_music->name = $request['name'];
  157. $post_music->url = $request['url'];
  158. $post_music->music_duration = $request['music_duration'];
  159. $post_music->updated_at = $date;
  160. DB::beginTransaction();
  161. try{
  162. $res = $post_music->save();
  163. if ($res) {
  164. $create_category_rel = [
  165. 'mid' => $post_music->id,
  166. 'music_category_id' => $request['category_id'],
  167. 'sort' => $request['sort'] ?? 999,
  168. 'created_at' => $date,
  169. 'updated_at' => $date,
  170. ];
  171. $result = $this->postMusicCategoryRel->where('id',$request['id'])->update($create_category_rel);
  172. if (!$result){
  173. throw new HttpException(500, '音乐与分类关联-修改失败');
  174. }
  175. }
  176. DB::commit();
  177. return Response::create();
  178. }catch (QueryException $exception){
  179. DB::rollBack();
  180. return Response::create([
  181. 'message' => '修改失败,请重试',
  182. 'error' => $exception->getMessage(),
  183. 'status_code' => 500
  184. ]);
  185. }
  186. }
  187. public function musicDelete($request)
  188. {
  189. $post_music_rel = $this->postMusicCategoryRel->where('id', $request['id'])->first();
  190. DB::beginTransaction();
  191. try {
  192. $res = $post_music_rel->delete();
  193. if ($res) {
  194. $post_music = $this->postMusic->where('id',$post_music_rel->mid)->delete();
  195. if (!$post_music){
  196. throw new HttpException(500, '音乐删除失败');
  197. }
  198. }
  199. DB::commit();
  200. return Response::create();
  201. } catch (QueryException $exception) {
  202. DB::rollBack();
  203. return Response::create([
  204. 'message' => '删除失败,请重试',
  205. 'error' => $exception->getMessage(),
  206. 'status_code' => 500
  207. ]);
  208. }
  209. }
  210. public function userMusic($request)
  211. {
  212. $perPage = isset($request['per_page']) ? $request['per_page'] : 20;
  213. return $this->postMusicUser->orderBy('id', 'asc')->paginate($perPage);
  214. }
  215. }