Commit b2ab6b8c authored by wangzhengwen's avatar wangzhengwen

课程

parent 9df090fa
......@@ -86,7 +86,7 @@ class Course extends BaseController
}
/**获取课详情
/**获取课详情
* @param Request $request
* @return \app\html|\think\response\Json|true
*/
......@@ -120,7 +120,7 @@ class Course extends BaseController
$data = $request->param();
$data = (new CourseModel())
->with(['getTeacher','getSections'=>['getCourseClass'],'getCourseClass'])
->with(['getSections'=>['getCourseClass'],'getCourseClass'])
->where('id',$data['course_id'])
->field('id,thumb,title,createtime,description,price,content,teacher_id,tvclick,click')
->find();
......
......@@ -4,6 +4,7 @@ namespace app\api\controller;
use app\api\middleware\Auth;
use app\api\service\UserService;
use app\api\validate\CourseValidate;
use app\BaseController;
use think\facade\Request;
use app\api\service\CourseProgressService;
......@@ -22,6 +23,11 @@ class CourseProgress extends BaseController
*/
public function reportProgress()
{
$vo = (new CourseValidate())->goCheck(['course_id','current_time','class_id']);
if ($vo !== true) {
return $vo;
}
$data = Request::only(['course_id', 'class_id', 'current_time']);
$token = Request::header('token');
......@@ -47,12 +53,20 @@ class CourseProgress extends BaseController
*/
public function getProgress()
{
// $vo = (new CourseValidate())->goCheck(['course_id']);
// if ($vo !== true) {
// return $vo;
// }
$token = Request::header('token');
$userId = UserService::getUserInfo($token)['id'];
$data = Request::only(['course_id','page','pageSize']);
// $data = Request::only(['course_id','page','pageSize']);
$page = Request::param('page', 1);
$pageSize = Request::param('pageSize', 10);
$progress = CourseProgressService::getUserAllCoursesProgress($userId, $data['page'], $data['pageSize']);
$progress = CourseProgressService::getUserAllCoursesProgress($userId, $page, $pageSize);
return $this->returnMsg('操作成功',1,$progress);
......@@ -63,6 +77,11 @@ class CourseProgress extends BaseController
*/
public function getLastLearn()
{
$vo = (new CourseValidate())->goCheck(['course_id']);
if ($vo !== true) {
return $vo;
}
$token = Request::header('token');
$userId = UserService::getUserInfo($token)['id'];
......@@ -72,4 +91,24 @@ class CourseProgress extends BaseController
return $this->returnMsg('操作成功',1,$lastLearn);
}
/**添加用户作业
*
*/
public function addUserWork()
{
$vo = (new CourseValidate())->goCheck(['course_id']);
if ($vo !== true) {
return $vo;
}
$token = Request::header('token');
$userId = UserService::getUserInfo($token)['id'];
$data = Request::only(['course_id']);
$userWork = CourseProgressService::addUserWork($userId, $data['course_id']);
return $this->returnMsg('操作成功',1,$userWork);
}
}
\ No newline at end of file
......@@ -32,6 +32,11 @@ class User extends BaseController
{
return $this->returnMsg('密码不正确',0);
}
if ($user['status'] != 1)
{
return $this->returnMsg('账号禁止登录',0);
}
$token = TokenService::generateToken($user['id'],$user->toArray());
$update['token'] = $token;
......
<?php
namespace app\api\controller\mine;
use app\api\middleware\Auth;
use app\api\service\UserService;
use app\api\validate\CourseValidate;
use app\BaseController;
use app\model\CourseUserWork;
use app\Request;
class Work extends BaseController
{
protected $middleware = [
Auth::class,
];
/**我的作业列表
* @param Request $request
* @return \app\html
*/
public function workList(Request $request)
{
$page = $request->param('page', 1);
$pageSize = $request->param('pageSize', 10);
$workList = CourseUserWork::workList($request->userId, $page, $pageSize);
return $this->returnMsg('success',1,$workList);
}
/**我的作业详情
* @param Request $request
* @return \app\html
*/
public function workDetail(Request $request)
{
$workId = $request->param('workId');
$detail = CourseUserWork::workDetail($workId);
return $this->returnMsg('success',1,$detail);
}
/**上传作业
* @param Request $request
* @return \app\html
*/
public function uploadWork(Request $request)
{
$vo = (new CourseValidate())->goCheck(['attachment_ids','work_id']);
if ($vo !== true) {
return $vo;
}
$data = $request->param();
$uploadWork = CourseUserWork::uploadWork($data['work_id'],$data['attachment_ids']);
return $this->returnMsg('success',1,$uploadWork);
}
}
\ No newline at end of file
......@@ -13,20 +13,20 @@ class Auth extends BaseController
// 在这里编写你的验证逻辑
$token = $request->header('token');
if (!$this->checkToken($token)) {
if (!$this->checkToken($request,$token)) {
return $this->returnMsg('Unauthorized',201);
}
$request->token = $token;
return $next($request);
}
protected function checkToken($token)
protected function checkToken($request,$token)
{
if (!$token)
{
return false;
}
$user = TokenService::verifyToken($token);
......@@ -34,6 +34,12 @@ class Auth extends BaseController
{
return false;
}
if ($user['status']!=1)
{
return false;
}
$request->userId = $user['user_id'];
return true;
}
......
......@@ -4,6 +4,9 @@ namespace app\api\service;
use app\model\Course;
use app\model\CourseClass;
use app\model\CourseProgress;
use app\model\CourseUserWork;
use app\model\CourseWork;
class CourseProgressService
{
/**
......@@ -60,6 +63,7 @@ class CourseProgressService
$progress->save($updateData);
}
return [
'progress' => $progress->look_tvtime,
'duration' => $progress->tvtime,
......@@ -67,9 +71,51 @@ class CourseProgressService
];
}
/**添加作业
* @param $userId
* @param $courseId
* @return true
*/
public static function addUserWork($userId, $courseId)
{
$workIds = CourseWork::where([
'user_id' => $userId,
'course_id' => $courseId,
])->column('id');
if (empty($workIds)) {
return true;
}
$existingWorks = CourseUserWork::where([
'user_id' => $userId,
'course_id' => $courseId,
])->whereIn('work_id', $workIds)
->column('work_id');
$newWorkIds = array_diff($workIds, $existingWorks);
if (!empty($newWorkIds)) {
$insertData = array_map(function($workId) use ($userId, $courseId) {
return [
'user_id' => $userId,
'course_id' => $courseId,
'work_id' => $workId,
'createtime' => time()
];
}, $newWorkIds);
CourseUserWork::insertAll($insertData);
}
return true;
}
/** 获取当前用户所有课程进度统计
* @param $userId
* @return void
*
*/
public static function getUserAllCoursesProgress($userId, $page = 1, $pageSize = 10)
{
......@@ -88,8 +134,11 @@ class CourseProgressService
];
}
// 分页查询课程基本信息
$query = Course::where('id', 'in', $courseIds)
->with(['thumb'])
->field('id,title,description,thumb');
$paginator = $query->paginate([
......@@ -127,7 +176,6 @@ class CourseProgressService
->where('user_id', $userId)
->where('course_id', $courseId)
->select();
// 统计计算
$finishedCount = 0;
$totalDuration = 0;
......@@ -145,7 +193,8 @@ class CourseProgressService
'progress' => $item->look_tvtime,
'duration' => $item->tvtime,
'is_finished' => $item->is_wc_look,
'last_learn' => $item->createtime
'last_learn' => $item->createtime,
'class_id' => $item->class_id//课时id,
];
}
......@@ -216,7 +265,6 @@ class CourseProgressService
if (empty($progressList)) {
return [];
}
// 返回所有记录(按时间倒序)
return array_map(function ($progress) {
return [
......
......@@ -6,8 +6,12 @@ class CourseValidate extends BaseValidate
{
protected $rule = [
'searchKeyWords'=>'require',
'category_id'=>'require',
'course_id'=>'require',
'category_id'=>'require|number',
'course_id'=>'require|number',
'class_id'=>'require|number',
'current_time'=>'require|number',
'attachment_ids'=>'require',
'work_id'=>'require|number',
];
// protected $message = [
......
......@@ -10,6 +10,8 @@
namespace app\model;
use app\api\service\UserService;
use app\model\system\SystemUploadFile;
use think\facade\Db;
use think\Model;
......@@ -54,6 +56,7 @@ class Course extends Model
->select();
}
//获取课程详情
public function getCouresDetail($course_id = 0)
{
// $where = ['status'=>3,'is_sell'=>1,'is_del'=>0];
......@@ -62,10 +65,24 @@ class Course extends Model
$where['id'] = $course_id;
}
return self::where($where)
$detail = self::where($where)
->with(['getTeacher'])
->field('id,thumb,title,createtime,description,price,content,teacher_id,tvclick,click')
->find();
$detail['is_learned'] = 0; //是否学习
$detail['is_buy'] = 0; //是否购买
$token = request()->header('token');
$user = UserService::getUserInfo($token);
if ($user)
{
$detail['is_learned'] = CourseProgress::where(['course_id'=>$detail['id'],'user_id'=>$user['id']])->count();
}
return $detail;
}
//关联教师
......@@ -92,5 +109,12 @@ class Course extends Model
->order('sort','asc');
}
//封面图
public function thumb()
{
return $this->hasOne(SystemUploadFile::class, 'fileid', 'thumb')
->field('fileid,filename,filesize,fileurl,filetype');
}
}
\ No newline at end of file
......@@ -14,7 +14,7 @@ class CourseProgress extends Model
// 自动时间戳(将createtime转换为时间戳自动管理)
protected $autoWriteTimestamp = true;
protected $createTime = 'createtime';
protected $updateTime = 'updatetime'; // 不需要更新时间字段
protected $updateTime = 'updatetime';
// 关联课程
public function course()
......
<?php
namespace app\model;
use app\model\system\SystemUploadFile;
use think\Model;
class CourseUserWork extends Model
{
// 设置完整表名
protected $table = 'fj_course_user_work';
// 自动时间戳(将createtime转换为时间戳自动管理)
protected $autoWriteTimestamp = true;
protected $createTime = 'createtime';
protected $updateTime = 'updatetime';
/** 作业列表
* @param $userId
* @param $page
* @param $pageSize
* @return array
* @throws \think\db\exception\DbException
*/
public static function workList($userId,$page=1,$pageSize=10)
{
return self::where(['user_id'=>$userId])
->with(['course','courseWork'])
->field('id,user_id,work_id,status,course_id,createtime')
->paginate([
'page' => $page,
'list_rows' => $pageSize
])
->toArray();
}
/**作业详情
* @param $id
* @return array
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public static function workDetail($id)
{
$detail = self::where(['id' => $id])
->with(['course', 'courseWork'])
->field('id,user_id,work_id,status,course_id,createtime')
->findOrEmpty();
if ($detail->isEmpty()) {
return [];
}
$detail = $detail->toArray();
// 处理 courseWork 文件 课程作业附件
if (!empty($detail['courseWork']['file_id_str'])) {
$fileIds = is_string($detail['courseWork']['file_id_str'])
? explode(',', $detail['courseWork']['file_id_str'])
: (array)$detail['courseWork']['file_id_str'];
$detail['courseWork']['file'] = SystemUploadFile::whereIn('fileid', $fileIds)
->field('fileurl,fileid,filename,filetype')
->select()
->toArray();
} else {
$detail['courseWork']['file'] = [];
}
// 处理 attachment 文件 学生上传附件
$attachmentIds = !empty($detail['attachment_ids'])
? (is_string($detail['attachment_ids']) ? explode(',', $detail['attachment_ids']) : (array)$detail['attachment_ids'])
: [];
$detail['attachment_file'] = !empty($attachmentIds)
? SystemUploadFile::whereIn('fileid', $attachmentIds)
->field('fileurl,fileid,filename,filetype')
->select()
->toArray()
: [];
return $detail;
}
/**用户作业上传
* @param $workId
* @param $attachment_ids
* @return CourseUserWork
*/
public static function uploadWork($workId,$attachment_ids)
{
return self::where(['id'=>$workId,'status'=>0])
->update(['attachment_ids'=>$attachment_ids,'status'=>1]);
}
//关联作业
public function courseWork()
{
return $this->hasOne(CourseWork::class, 'id', 'work_id')->field('id,title,file_id_str');
}
//关联课程
public function course()
{
return $this->hasOne(Course::class, 'id', 'course_id')->field('id,title');
}
}
\ No newline at end of file
<?php
namespace app\model;
use think\Model;
class CourseWork extends Model
{
// 设置完整表名
protected $table = 'fj_course_work';
// 自动时间戳(将createtime转换为时间戳自动管理)
protected $autoWriteTimestamp = true;
protected $createTime = 'createtime';
protected $updateTime = 'updatetime';
public function getFilelistAttr($value,$data)
{
return get_upload_file($data['file_id_str'],'list');
}
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment