CategoryRepository.php 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: Administrator
  5. * Date: 2019-06-10
  6. * Time: 17:40
  7. */
  8. namespace App\Repositories;
  9. use App\Models\Category;
  10. use App\Models\CategorySuggest;
  11. use App\Models\CategoryTopic;
  12. use Dingo\Api\Http\Response;
  13. use Illuminate\Support\Carbon;
  14. use Illuminate\Support\Facades\DB;
  15. use Illuminate\Database\QueryException;
  16. use Illuminate\Support\Facades\Log;
  17. class CategoryRepository {
  18. public function __construct(Category $category,CategoryTopic $categoryTopic,CategorySuggest $categorySuggest){
  19. $this->category = $category;
  20. $this->categoryTopic = $categoryTopic;
  21. $this->categorySuggest = $categorySuggest;
  22. }
  23. //列表
  24. public function index($request){
  25. $perPage = isset($request['per_page']) ? $request['per_page'] : 20;
  26. $where = [];
  27. if(isset($request['name'])){
  28. $where[] = ['name', 'like', "%{$request['name']}%"];
  29. }
  30. return $this->category->where($where)->orderBy('sort', 'asc')->paginate($perPage);
  31. }
  32. //详情
  33. public function view($request){
  34. return $this->category->where(['id'=>$request['id']])->first();
  35. }
  36. //创建
  37. public function create($request){
  38. $category = $this->category->where(['name'=>$request['name']])->first();
  39. if($category){
  40. return Response::create([
  41. 'message' => '该分类已存在',
  42. 'status_code' => 500
  43. ]);
  44. }
  45. $data = [
  46. 'name' => $request['name'],
  47. 'img' => $request['img'],
  48. 'sort' => $request['sort'],
  49. 'desc' => $request['desc'],
  50. ];
  51. $topic_ids = '';
  52. if(!empty($request['topic_ids'])){
  53. $topic_ids = explode(',', $request['topic_ids']);
  54. }
  55. DB::beginTransaction();
  56. try{
  57. $categoryInfo = $this->category->create($data);
  58. if($categoryInfo){
  59. if(!empty($topic_ids)){
  60. $category_topic_data = [];
  61. foreach($topic_ids as $value){
  62. $category_topic_data[] = [
  63. 'category_id' => $categoryInfo->id,
  64. 'topic_id' => $value,
  65. ];
  66. }
  67. $this->categoryTopic->insert($category_topic_data);
  68. }
  69. }
  70. DB::commit();
  71. return Response::create();
  72. }catch (QueryException $exception){
  73. DB::rollBack();
  74. Log::debug('新增话题分组:'.$exception->getMessage());
  75. return Response::create([
  76. 'message' => '新增话题失败,请重试',
  77. 'error' => $exception->getMessage(),
  78. 'status_code' => 500
  79. ]);
  80. }
  81. }
  82. //编辑
  83. public function edit($request){
  84. $category = $this->category->where(['id'=>$request['id']])->first();
  85. if(!$category){
  86. return Response::create([
  87. 'message' => '该分类不存在',
  88. 'status_code' => 500
  89. ]);
  90. }
  91. $_category = $this->category->where(['name'=>$request['name']])->where('id','<>',$category->id)->first();
  92. if($_category){
  93. return Response::create([
  94. 'message' => '该分类已存在',
  95. 'status_code' => 500
  96. ]);
  97. }
  98. $category->name = $request['name'];
  99. $category->img = $request['img'];
  100. $category->desc = $request['desc'];
  101. $category->sort = $request['sort'];
  102. $topic_ids = [];
  103. if(!empty($request['topic_ids'])){
  104. $topic_ids = explode(',', $request['topic_ids']);
  105. }
  106. DB::beginTransaction();
  107. try{
  108. $categoryInfo = $category->save();
  109. if($categoryInfo){
  110. //删除
  111. $this->categoryTopic->where(['category_id'=>$category->id])->delete();
  112. if($topic_ids){
  113. $category_topic_data = [];
  114. foreach($topic_ids as $value){
  115. $category_topic_data[] = [
  116. 'category_id' => $category->id,
  117. 'topic_id' => $value,
  118. ];
  119. }
  120. $this->categoryTopic->insert($category_topic_data);
  121. }
  122. }
  123. DB::commit();
  124. return Response::create();
  125. }catch (QueryException $exception){
  126. DB::rollBack();
  127. Log::debug('新增话题分组:'.$exception->getMessage());
  128. return Response::create([
  129. 'message' => '新增话题失败,请重试',
  130. 'error' => $exception->getMessage(),
  131. 'status_code' => 500
  132. ]);
  133. }
  134. }
  135. //修改
  136. public function update($request){
  137. $category = $this->category->where('id', $request['id'])->first();
  138. if(isset($request['is_suggest']) && $request['is_suggest'] !== null){
  139. $category->is_suggest = $request['is_suggest'];
  140. }
  141. $res = $category->save();
  142. if($res){
  143. return Response::create();
  144. }
  145. }
  146. /**
  147. * 设置开启
  148. */
  149. public function isOpen($id)
  150. {
  151. $category = $this->category->where('id', $id)->first();
  152. if (!$category) {
  153. return Response::create([
  154. 'message' => '获取内容分类信息失败',
  155. 'status_code' => 500
  156. ]);
  157. }
  158. if ($category->is_open == 1) {
  159. $category->is_open = 0;
  160. } else {
  161. $category->is_open = 1;
  162. }
  163. DB::beginTransaction();
  164. try {
  165. $category->save();
  166. DB::commit();
  167. return Response::create();
  168. } catch (QueryException $exception) {
  169. DB::rollBack();
  170. Log::debug('开启分类失败:' . $id . $exception->getMessage());
  171. return Response::create([
  172. 'message' => '操作失败,请重试',
  173. 'error' => $exception->getMessage(),
  174. 'status_code' => 500
  175. ]);
  176. }
  177. }
  178. /**
  179. * 编辑话题分类(推荐内容首页用)
  180. */
  181. public function suggestEdit($request)
  182. {
  183. $date = Carbon::now()->toDateTimeString();
  184. $data = [];
  185. $ids = array_unique($request['category_ids']);
  186. foreach($ids as $id){
  187. $data[] = [
  188. 'category_id' => $id,
  189. 'created_at' => $date,
  190. 'updated_at' => $date
  191. ];
  192. }
  193. DB::beginTransaction();
  194. try {
  195. $this->categorySuggest->where('id', '>', 0)->delete();
  196. $this->categorySuggest->insert($data);
  197. DB::commit();
  198. return Response::create();
  199. } catch (QueryException $exception) {
  200. DB::rollBack();
  201. Log::debug('编辑话题分类失败:' . $exception->getMessage());
  202. return Response::create([
  203. 'message' => '编辑失败,请重试',
  204. 'error' => $exception->getMessage(),
  205. 'status_code' => 500
  206. ]);
  207. }
  208. }
  209. /**
  210. * 话题分类详情(推荐内容首页用)
  211. */
  212. public function suggestDetail()
  213. {
  214. $lists = $this->categorySuggest->get();
  215. $data = [];
  216. foreach($lists as $item){
  217. $data[] = [
  218. 'id' => $item->category_id,
  219. 'name' => $item->category->name
  220. ];
  221. }
  222. return $data;
  223. }
  224. }