CourseController.php 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  1. <?php
  2. namespace App\Http\Controllers\Course;
  3. use App\Models\Course\Course;
  4. use App\Models\DwbsUser;
  5. use App\Models\Course\Read;
  6. use App\Models\Course\Share;
  7. use App\Models\Course\Comment;
  8. use App\Models\Course\Collection;
  9. use Carbon\Carbon;
  10. use EasyWeChat\Factory;
  11. use Illuminate\Http\Request;
  12. use FFMpeg\FFMpeg;
  13. use App\Http\Controllers\Controller;
  14. use Illuminate\Support\Facades\DB;
  15. use Illuminate\Support\Facades\Auth;
  16. use Illuminate\Support\Facades\Redis;
  17. use Illuminate\Support\Facades\Storage;
  18. class CourseController extends Controller
  19. {
  20. //首页展示数据
  21. public function getDataInfo(Request $request)
  22. {
  23. $data['count']=Read::count();
  24. return $this->success($data);
  25. }
  26. //获取列表
  27. public function list(Request $request): \Illuminate\Http\JsonResponse
  28. {
  29. $page_index=$request->input('page_index');
  30. $page_size=$request->input('page_size');
  31. $c_id=$request->input('c_id');
  32. $num=$page_size*($page_index-1);
  33. $level=Auth::user()->level;
  34. $permission=Course::$levelCourse[$level];
  35. $data=Course::setField()->where('state',1)
  36. ->whereIn('permission',$permission);
  37. if($c_id){
  38. $data->where('c_id',$c_id);
  39. }
  40. $count=$data->count();
  41. $list=$data->orderByDesc('is_top')->orderByDesc('top_at')->orderBy('id','desc')
  42. ->skip($num)->take($page_size)->get();
  43. return $this->success_list($list,'',$count);
  44. }
  45. //最近上传
  46. public function current(Request $request): \Illuminate\Http\JsonResponse
  47. {
  48. $page_index=$request->input('page_index');
  49. $page_size=$request->input('page_size');
  50. $num=$page_size*($page_index-1);
  51. $level=Auth::user()->level;
  52. $permission=Course::$levelCourse[$level];
  53. $count=Course::setField()->where('state',1)->whereIn('permission',$permission)
  54. ->where('created_at','>',Carbon::now()->subWeeks(1))->count();
  55. $list=Course::query()->where('state',1)->whereIn('permission',$permission)
  56. ->where('created_at','>',Carbon::now()->subWeeks(1))
  57. ->orderByDesc('is_top')->orderByDesc('top_at')->orderBy('id','desc')
  58. ->skip($num)->take($page_size)->get();
  59. return $this->success_list($list,'',$count);
  60. }
  61. //获取课程详情
  62. public function detail(Request $request)
  63. {
  64. $id=$request->input('id');
  65. $user=Auth::guard('api')->user();
  66. $permission=Course::$levelCourse[$user->level];//获取用户对应课程权限
  67. $res=null;
  68. if($user){
  69. $res = Collection::where('user_id',$user->id)->where('course_id',$id)->exists();
  70. }
  71. $course=Course::query()->where('id',$id)->first();
  72. if(!in_array($course->permission,$permission)){ //判断用户是否有权限访问
  73. return $this->error('450001','','你没有权限访问该课程');
  74. }
  75. if(empty($course)){
  76. return $this->error('450001','','课程不存在');
  77. }
  78. if($course->state==0){
  79. return $this->error('450001','','课程已下线');
  80. }
  81. $info['Course']=$course;
  82. if($res){
  83. $info['user']['is_collection'] = 1;
  84. }else{
  85. $info['user']['is_collection'] = 0;
  86. }
  87. //阅读记录
  88. Read::create([
  89. 'user_id'=>$user->id,
  90. 'course_id'=>$id,
  91. ]);
  92. Course::where('id',$id)->increment('read');
  93. return $this->success($info);
  94. }
  95. //课程评论
  96. public function getCourseComment(Request $request)
  97. {
  98. $user_id=Auth::user()->id;
  99. $page_index=$request->input('page_index');
  100. $page_size=$request->input('page_size');
  101. $id=$request->input('id');
  102. $num=$page_size*($page_index-1);
  103. $data=Comment::where('course_id',$id)
  104. ->where(function($query)use($user_id){
  105. $query->where('state',1)->orWhere('user_id',$user_id);
  106. });
  107. $count=$data->count();
  108. $list = $data->with(['user:id,nickname,headimgurl'])
  109. ->skip($num)->take($page_size)
  110. ->get();
  111. return $this->success_list($list,'',$count);
  112. }
  113. //浏览
  114. public function read(Request $request): \Illuminate\Http\JsonResponse
  115. {
  116. $user_id = Auth::guard('api')->user()->id;
  117. $article_id = $request->input('article_id');
  118. try{
  119. DB::transaction(function()use($user_id,$article_id){
  120. Read::create([
  121. 'user_id' => $user_id,
  122. 'article_id' => $article_id
  123. ]);
  124. Course::where('id',$article_id)->increment('read');
  125. },5);
  126. return $this->success([]);
  127. }catch(\Exception $e){
  128. return $this->error();
  129. }
  130. }
  131. //分享
  132. public function share(Request $request): \Illuminate\Http\JsonResponse
  133. {
  134. $user_id=Auth::guard('api')->user()->id;
  135. $course_id=$request->input('course_id');
  136. try{
  137. DB::transaction(function()use($user_id,$course_id){
  138. Share::create([
  139. 'user_id'=>$user_id,
  140. 'course_id'=>$course_id
  141. ]);
  142. Course::where('id',$course_id)->increment('share');
  143. },5);
  144. return $this->success([]);
  145. }catch(\Exception $e){
  146. return $this->error();
  147. }
  148. }
  149. //提交评论
  150. public function addComment(Request $request)
  151. {
  152. $user_id=Auth::guard('api')->user()->id;
  153. $content=$request->input('content');
  154. if($request->input('article_id')=='wetalk'){
  155. $article_id=0;
  156. }else{
  157. $article_id=$request->input('article_id');
  158. }
  159. $res=Comment::create([
  160. 'user_id'=>$user_id,
  161. 'article_id'=>$article_id,
  162. 'content'=>$content,
  163. 'is_audit'=>0
  164. ]);
  165. if($res){
  166. return $this->success([]);
  167. }else{
  168. return $this->error();
  169. }
  170. }
  171. //获取微聊所有评论
  172. public function getAllWetalkComment(Request $request)
  173. {
  174. $page_index=$request->input('page_index');
  175. $page_size=$request->input('page_size');
  176. $num=$page_size*($page_index-1);
  177. $count=Comment::where('article_id',0)->count();
  178. $list=Comment::where('article_id',0)->with(['user:id,nickname,headimgurl'])->skip($num)->take($page_size)->get();
  179. return $this->success_list($list,'',$count);
  180. }
  181. //获取微聊所有点赞
  182. public function getArticleLike(Request $request)
  183. {
  184. $page_index=$request->input('page_index');
  185. $page_size=$request->input('page_size');
  186. $sort=$request->input('sort');
  187. $num=$page_size*($page_index-1);
  188. $user_id=Auth::guard('api')->user()->id;
  189. $count=Like::where('user_id',$user_id)->count();
  190. $list=Like::where('user_id',$user_id)->has('article')->with(['user:id,nickname,headimgurl','article'=>function($query){
  191. $query->where('id','>',0);
  192. }])->orderBy('created_at',$sort)->skip($num)->take($page_size)->get();
  193. return $this->success_list($list,'',$count);
  194. }
  195. //获取微聊首页三数据
  196. public function getWetalkData(Request $request)
  197. {
  198. $data['like']=Like::where('article_id',0)->count();
  199. $data['comment']=Comment::where('article_id',0)->count();
  200. $data['share']=Share::where('article_id',0)->count();
  201. return $this->success($data);
  202. }
  203. //获取微信授权
  204. public function getSignPackage()
  205. {
  206. $config = config('wechat.official_account.daweiboshi');
  207. $app = Factory::officialAccount($config);
  208. $url='https://weiliao.woaidakele.cn/api/gzh';
  209. $app->jssdk->setUrl($url);
  210. $data=$app->jssdk->buildConfig(array('onMenuShareAppMessage','onMenuShareTimeline',
  211. 'openLocation','getLocation','chooseImage',
  212. 'uploadImage', 'downloadImage','scanQRCode',
  213. 'updateAppMessageShareData', 'updateTimelineShareData'), true);
  214. return $this->success($data);
  215. }
  216. }