|
|
|
|
@ -109,7 +109,7 @@ class CourseController extends CommonController
|
|
|
|
|
if ($validator->fails()) {
|
|
|
|
|
return $this->fail([ResponseCode::ERROR_PARAMETER, implode(',', $validator->errors()->all())]);
|
|
|
|
|
}
|
|
|
|
|
$detail = Course::with('qunImage', 'typeDetail', 'courseForms', 'teacher')
|
|
|
|
|
$detail = Course::with('qunImage', 'typeDetail', 'courseForms', 'teacher','courseContentEvaluation.courseContentEvaluationAsks')
|
|
|
|
|
->withCount(['courseSigns as my_user' => function ($query) {
|
|
|
|
|
$query->where('user_id', $this->getUserId());
|
|
|
|
|
}])->find($all['course_id']);
|
|
|
|
|
@ -223,7 +223,7 @@ class CourseController extends CommonController
|
|
|
|
|
*/
|
|
|
|
|
public function myCourse()
|
|
|
|
|
{
|
|
|
|
|
$list = Course::with('typeDetail')->with(['courseSigns' => function ($query) {
|
|
|
|
|
$list = Course::with('typeDetail', 'courseContentEvaluation')->with(['courseSigns' => function ($query) {
|
|
|
|
|
$query->where('user_id', $this->getUserId());
|
|
|
|
|
}])->whereHas('courseSigns', function ($query) {
|
|
|
|
|
$query->where('user_id', $this->getUserId());
|
|
|
|
|
@ -236,6 +236,7 @@ class CourseController extends CommonController
|
|
|
|
|
* path="/api/mobile/course/my-course-content",
|
|
|
|
|
* tags={"小程序-课程"},
|
|
|
|
|
* summary="我的课表",
|
|
|
|
|
* @OA\Parameter(name="date", in="query", @OA\Schema(type="string"), required=false, description="日期"),
|
|
|
|
|
* @OA\Response(
|
|
|
|
|
* response=200,
|
|
|
|
|
* description="操作成功"
|
|
|
|
|
@ -244,18 +245,24 @@ class CourseController extends CommonController
|
|
|
|
|
*/
|
|
|
|
|
public function myCourseContent()
|
|
|
|
|
{
|
|
|
|
|
$list = CourseContent::with('course.typeDetail', 'teacher', 'courseContentEvaluation')->whereHas('course', function ($query) {
|
|
|
|
|
$query->where('course_status', '!=', 40)->where('course_content_status', 1);
|
|
|
|
|
$query->whereHas('courseSigns', function ($query) {
|
|
|
|
|
$query->where('user_id', $this->getUserId())->where('status', 1)->where(function ($q) {
|
|
|
|
|
$q->where('fee_status', 1)->orWhere(function ($q) {
|
|
|
|
|
$q->whereHas('course', function ($qry) {
|
|
|
|
|
$qry->where('is_fee', 0);
|
|
|
|
|
$date = request('date');
|
|
|
|
|
$list = CourseContent::with('course.typeDetail', 'teacher', 'courseContentEvaluation')
|
|
|
|
|
->where(function ($query) use ($date) {
|
|
|
|
|
if ($date) {
|
|
|
|
|
$query->where('date', $date);
|
|
|
|
|
}
|
|
|
|
|
})->whereHas('course', function ($query) {
|
|
|
|
|
$query->where('course_status', '!=', 40)->where('course_content_status', 1);
|
|
|
|
|
$query->whereHas('courseSigns', function ($query) {
|
|
|
|
|
$query->where('user_id', $this->getUserId())->where('status', 1)->where(function ($q) {
|
|
|
|
|
$q->where('fee_status', 1)->orWhere(function ($q) {
|
|
|
|
|
$q->whereHas('course', function ($qry) {
|
|
|
|
|
$qry->where('is_fee', 0);
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
})->orderBy('date')->get();
|
|
|
|
|
})->orderBy('date')->get();
|
|
|
|
|
return $this->success(compact('list'));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -311,12 +318,10 @@ class CourseController extends CommonController
|
|
|
|
|
$messages = [
|
|
|
|
|
'course_content_evaluation_id.required' => '问卷id必填',
|
|
|
|
|
'data.required' => '表单数据必填',
|
|
|
|
|
// 'time_total.required' => '用时必填'
|
|
|
|
|
];
|
|
|
|
|
$validator = Validator::make($all, [
|
|
|
|
|
'course_content_evaluation_id' => 'required',
|
|
|
|
|
'data' => 'required',
|
|
|
|
|
// 'time_total' => 'required'
|
|
|
|
|
], $messages);
|
|
|
|
|
if ($validator->fails()) {
|
|
|
|
|
return $this->fail([ResponseCode::ERROR_PARAMETER, implode(',', $validator->errors()->all())]);
|
|
|
|
|
@ -338,6 +343,7 @@ class CourseController extends CommonController
|
|
|
|
|
return $this->fail([ResponseCode::ERROR_BUSINESS, '您已提交过评价']);
|
|
|
|
|
}
|
|
|
|
|
$model = CourseContentEvaluationForm::create([
|
|
|
|
|
'course_id' => $courseContentEvaluation->course_id,
|
|
|
|
|
'course_content_evaluation_id' => $all['course_content_evaluation_id'],
|
|
|
|
|
'user_id' => $this->getUserId(),
|
|
|
|
|
'time_total' => $all['time_total'] ?? 0,
|
|
|
|
|
@ -455,7 +461,8 @@ class CourseController extends CommonController
|
|
|
|
|
* path="/api/mobile/course/distance",
|
|
|
|
|
* tags={"小程序-计算距离"},
|
|
|
|
|
* summary="签到",
|
|
|
|
|
* @OA\Parameter(name="course_content_id", in="query", @OA\Schema(type="string"), required=false, description="课表id"),
|
|
|
|
|
* @OA\Parameter(name="course_id", in="query", @OA\Schema(type="string"), required=false, description="课程id(二选一)"),
|
|
|
|
|
* @OA\Parameter(name="course_content_id", in="query", @OA\Schema(type="string"), required=false, description="课表id(二选一)"),
|
|
|
|
|
* @OA\Parameter(name="longitude", in="query", @OA\Schema(type="string"), required=false, description="longitude"),
|
|
|
|
|
* @OA\Parameter(name="latitude", in="query", @OA\Schema(type="string"), required=false, description="latitude"),
|
|
|
|
|
* @OA\Response(
|
|
|
|
|
@ -470,20 +477,26 @@ class CourseController extends CommonController
|
|
|
|
|
$messages = [
|
|
|
|
|
'longitude.required' => '经度必填',
|
|
|
|
|
'latitude.required' => '纬度必填',
|
|
|
|
|
'course_content_id.required' => '课程id必填',
|
|
|
|
|
];
|
|
|
|
|
$validator = Validator::make($all, [
|
|
|
|
|
'longitude' => 'required',
|
|
|
|
|
'latitude' => 'required',
|
|
|
|
|
'course_content_id' => 'required'
|
|
|
|
|
], $messages);
|
|
|
|
|
if ($validator->fails()) {
|
|
|
|
|
return $this->fail([ResponseCode::ERROR_PARAMETER, implode(',', $validator->errors()->all())]);
|
|
|
|
|
}
|
|
|
|
|
// 获取打卡范围,千米
|
|
|
|
|
$content_check_range = Config::getValueByKey('content_check_range');
|
|
|
|
|
$courseContent = CourseContent::find($all['course_content_id']);
|
|
|
|
|
$distance = getDistance($courseContent->longitude, $courseContent->latitude, $all['longitude'], $all['latitude']);
|
|
|
|
|
if (isset($all['course_id'])) {
|
|
|
|
|
$info = Course::find($all['course_id']);
|
|
|
|
|
}
|
|
|
|
|
if (isset($all['course_content_id'])) {
|
|
|
|
|
$info = CourseContent::find($all['course_content_id']);
|
|
|
|
|
}
|
|
|
|
|
if (!isset($info)) {
|
|
|
|
|
return $this->fail([ResponseCode::ERROR_PARAMETER, '数据不存在']);
|
|
|
|
|
}
|
|
|
|
|
$distance = getDistance($info->longitude, $info->latitude, $all['longitude'], $all['latitude']);
|
|
|
|
|
return $this->success(compact('distance', 'content_check_range'));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -491,7 +504,8 @@ class CourseController extends CommonController
|
|
|
|
|
* @OA\Get(
|
|
|
|
|
* path="/api/mobile/course/content-check",
|
|
|
|
|
* tags={"小程序-课程"},
|
|
|
|
|
* summary="签到",
|
|
|
|
|
* summary="课表签到",
|
|
|
|
|
* @OA\Parameter(name="batch_sign", in="query", @OA\Schema(type="string"), required=false, description="是否同日期批量签到0否1是"),
|
|
|
|
|
* @OA\Parameter(name="course_content_id", in="query", @OA\Schema(type="string"), required=false, description="课表id"),
|
|
|
|
|
* @OA\Parameter(name="longitude", in="query", @OA\Schema(type="string"), required=false, description="longitude"),
|
|
|
|
|
* @OA\Parameter(name="latitude", in="query", @OA\Schema(type="string"), required=false, description="latitude"),
|
|
|
|
|
@ -507,7 +521,7 @@ class CourseController extends CommonController
|
|
|
|
|
$messages = [
|
|
|
|
|
'longitude.required' => '经度必填',
|
|
|
|
|
'latitude.required' => '纬度必填',
|
|
|
|
|
'course_content_id.required' => '课程id必填',
|
|
|
|
|
'course_content_id.required' => '课表id必填',
|
|
|
|
|
];
|
|
|
|
|
$validator = Validator::make($all, [
|
|
|
|
|
'longitude' => 'required',
|
|
|
|
|
@ -525,7 +539,8 @@ class CourseController extends CommonController
|
|
|
|
|
return $this->fail([ResponseCode::ERROR_BUSINESS, '超出打卡范围']);
|
|
|
|
|
}
|
|
|
|
|
// 判断当天才能签到
|
|
|
|
|
if (date('Y-m-d') != $courseContent->date) {
|
|
|
|
|
$today = date('Y-m-d');
|
|
|
|
|
if ($today != $courseContent->date) {
|
|
|
|
|
return $this->fail([ResponseCode::ERROR_BUSINESS, '不在签到时间']);
|
|
|
|
|
}
|
|
|
|
|
// 不能重复签到
|
|
|
|
|
@ -537,40 +552,125 @@ class CourseController extends CommonController
|
|
|
|
|
}
|
|
|
|
|
CourseContentCheck::create([
|
|
|
|
|
'course_content_id' => $all['course_content_id'],
|
|
|
|
|
'course_id' => $courseContent->course_id,
|
|
|
|
|
'user_id' => $this->getUserId(),
|
|
|
|
|
'longitude' => $all['longitude'],
|
|
|
|
|
'latitude' => $all['latitude'],
|
|
|
|
|
]);
|
|
|
|
|
return $this->success('打卡成功');
|
|
|
|
|
// 同日期课程批量签到
|
|
|
|
|
$batch_sign = request('batch_sign', 0);
|
|
|
|
|
if ($batch_sign) {
|
|
|
|
|
$courseContentList = CourseContent::where('date', $today)
|
|
|
|
|
->whereHas('course', function ($query) {
|
|
|
|
|
$query->where('course_status', '!=', 40)->where('course_content_status', 1);
|
|
|
|
|
$query->whereHas('courseSigns', function ($query) {
|
|
|
|
|
$query->where('user_id', $this->getUserId())->where('status', 1)->where(function ($q) {
|
|
|
|
|
$q->where('fee_status', 1)->orWhere(function ($q) {
|
|
|
|
|
$q->whereHas('course', function ($qry) {
|
|
|
|
|
$qry->where('is_fee', 0);
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
})->get();
|
|
|
|
|
foreach ($courseContentList as $courseContent) {
|
|
|
|
|
CourseContentCheck::create([
|
|
|
|
|
'course_id' => $courseContent->course_id,
|
|
|
|
|
'course_content_id' => $courseContent->id,
|
|
|
|
|
'user_id' => $this->getUserId(),
|
|
|
|
|
'longitude' => $all['longitude'],
|
|
|
|
|
'latitude' => $all['latitude'],
|
|
|
|
|
]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return $this->success('签到成功');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @OA\Get(
|
|
|
|
|
* path="/api/mobile/course/content-check-list",
|
|
|
|
|
* path="/api/mobile/course/course-check",
|
|
|
|
|
* tags={"小程序-课程"},
|
|
|
|
|
* summary="获取签到记录",
|
|
|
|
|
* @OA\Parameter(name="course_content_id", in="query", @OA\Schema(type="string"), required=false, description="课表id"),
|
|
|
|
|
* summary="课程签到",
|
|
|
|
|
* @OA\Parameter(name="course_id", in="query", @OA\Schema(type="string"), required=false, description="课表id"),
|
|
|
|
|
* @OA\Parameter(name="longitude", in="query", @OA\Schema(type="string"), required=false, description="longitude"),
|
|
|
|
|
* @OA\Parameter(name="latitude", in="query", @OA\Schema(type="string"), required=false, description="latitude"),
|
|
|
|
|
* @OA\Response(
|
|
|
|
|
* response=200,
|
|
|
|
|
* description="操作成功"
|
|
|
|
|
* )
|
|
|
|
|
* )
|
|
|
|
|
*/
|
|
|
|
|
public function contentCheckList()
|
|
|
|
|
public function courseCheck()
|
|
|
|
|
{
|
|
|
|
|
$all = \request()->all();
|
|
|
|
|
$messages = [
|
|
|
|
|
'course_content_id.required' => '课程id必填',
|
|
|
|
|
'longitude.required' => '经度必填',
|
|
|
|
|
'latitude.required' => '纬度必填',
|
|
|
|
|
'course_id.required' => '课表id必填',
|
|
|
|
|
];
|
|
|
|
|
$validator = Validator::make($all, [
|
|
|
|
|
'course_content_id' => 'required'
|
|
|
|
|
'longitude' => 'required',
|
|
|
|
|
'latitude' => 'required',
|
|
|
|
|
'course_id' => 'required'
|
|
|
|
|
], $messages);
|
|
|
|
|
if ($validator->fails()) {
|
|
|
|
|
return $this->fail([ResponseCode::ERROR_PARAMETER, implode(',', $validator->errors()->all())]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$list = CourseContentCheck::where('course_content_id', $all['course_content_id'])
|
|
|
|
|
// 获取打卡范围,千米
|
|
|
|
|
$content_check_range = Config::getValueByKey('content_check_range');
|
|
|
|
|
$course = Course::find($all['course_id']);
|
|
|
|
|
if (empty($course->longitude) || empty($course->latitude)) {
|
|
|
|
|
return $this->fail([ResponseCode::ERROR_BUSINESS, '请先设置课程经纬度']);
|
|
|
|
|
}
|
|
|
|
|
$distance = getDistance($course->longitude, $course->latitude, $all['longitude'], $all['latitude']);
|
|
|
|
|
if ($distance > $content_check_range) {
|
|
|
|
|
return $this->fail([ResponseCode::ERROR_BUSINESS, '超出打卡范围']);
|
|
|
|
|
}
|
|
|
|
|
// 判断当天才能签到
|
|
|
|
|
$today = date('Y-m-d');
|
|
|
|
|
if ($today != $course->start_date) {
|
|
|
|
|
return $this->fail([ResponseCode::ERROR_BUSINESS, '不在签到时间']);
|
|
|
|
|
}
|
|
|
|
|
// 不能重复签到
|
|
|
|
|
$courseContentCheck = CourseContentCheck::where('course_id', $all['course_id'])
|
|
|
|
|
->where('user_id', $this->getUserId())
|
|
|
|
|
->first();
|
|
|
|
|
if ($courseContentCheck) {
|
|
|
|
|
return $this->fail([ResponseCode::ERROR_BUSINESS, '不能重复签到']);
|
|
|
|
|
}
|
|
|
|
|
CourseContentCheck::create([
|
|
|
|
|
'course_id' => $all['course_id'],
|
|
|
|
|
'user_id' => $this->getUserId(),
|
|
|
|
|
'longitude' => $all['longitude'],
|
|
|
|
|
'latitude' => $all['latitude'],
|
|
|
|
|
]);
|
|
|
|
|
return $this->success('课程签到成功');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @OA\Get(
|
|
|
|
|
* path="/api/mobile/course/content-check-list",
|
|
|
|
|
* tags={"小程序-课程"},
|
|
|
|
|
* summary="获取签到记录",
|
|
|
|
|
* @OA\Parameter(name="course_id", in="query", @OA\Schema(type="string"), required=false, description="课程id"),
|
|
|
|
|
* @OA\Parameter(name="course_content_id", in="query", @OA\Schema(type="string"), required=false, description="课表id"),
|
|
|
|
|
* @OA\Response(
|
|
|
|
|
* response=200,
|
|
|
|
|
* description="操作成功"
|
|
|
|
|
* )
|
|
|
|
|
* )
|
|
|
|
|
*/
|
|
|
|
|
public function contentCheckList()
|
|
|
|
|
{
|
|
|
|
|
$all = \request()->all();
|
|
|
|
|
$list = CourseContentCheck::where(function ($query) use ($all) {
|
|
|
|
|
if (isset($all['course_id'])) {
|
|
|
|
|
$query->where('course_id', $all['course_id']);
|
|
|
|
|
}
|
|
|
|
|
if (isset($all['course_content_id'])) {
|
|
|
|
|
$query->where('course_content_id', $all['course_content_id']);
|
|
|
|
|
}
|
|
|
|
|
})->where('user_id', $this->getUserId())
|
|
|
|
|
->orderBy('created_at', 'desc')
|
|
|
|
|
->get();
|
|
|
|
|
return $this->success(compact('list'));
|
|
|
|
|
@ -855,29 +955,16 @@ class CourseController extends CommonController
|
|
|
|
|
if ($validator->fails()) {
|
|
|
|
|
return $this->fail([ResponseCode::ERROR_PARAMETER, implode(',', $validator->errors()->all())]);
|
|
|
|
|
}
|
|
|
|
|
// $startDate = $all['month'] . '-01';
|
|
|
|
|
// $endDate = date('Y-m-t', strtotime($startDate));
|
|
|
|
|
$list = Calendar::with('course', 'courseContent')
|
|
|
|
|
->where(function ($query) use ($all) {
|
|
|
|
|
if (isset($all['type'])) {
|
|
|
|
|
$query->where('type', $all['type']);
|
|
|
|
|
}
|
|
|
|
|
})->where('start_time', 'like', '%' . $all['month'] . '%')
|
|
|
|
|
->where('is_publish', 1)
|
|
|
|
|
->orderBy('start_time', 'asc')
|
|
|
|
|
->get();
|
|
|
|
|
|
|
|
|
|
// $range = getDates($startDate, $endDate);
|
|
|
|
|
// $list = [];
|
|
|
|
|
// foreach ($range as $date) {
|
|
|
|
|
// // 查询Calendar模型里start_time和end_time在日期内的数据,其中date是年月日,start_time和end_time是时分秒
|
|
|
|
|
// $list[] = [
|
|
|
|
|
// 'date' => $date,
|
|
|
|
|
// 'details' => Calendar::with('course', 'courseContent')
|
|
|
|
|
// ->whereDate('start_time', '<=', $date)
|
|
|
|
|
// ->whereDate('end_time', '>=', $date)
|
|
|
|
|
// ->get()
|
|
|
|
|
// ];
|
|
|
|
|
// }
|
|
|
|
|
return $this->success($list);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|