diff --git a/app/Http/Controllers/Mobile/CourseController.php b/app/Http/Controllers/Mobile/CourseController.php index fc576ea..d3b9ca9 100755 --- a/app/Http/Controllers/Mobile/CourseController.php +++ b/app/Http/Controllers/Mobile/CourseController.php @@ -462,7 +462,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( @@ -477,20 +478,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')); } @@ -498,7 +505,7 @@ 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"), @@ -515,7 +522,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', @@ -546,6 +553,7 @@ 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'], @@ -579,6 +587,64 @@ class CourseController extends CommonController return $this->success('签到成功'); } + /** + * @OA\Get( + * path="/api/mobile/course/course-content-check", + * tags={"小程序-课程"}, + * 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 courseContentCheck() + { + $all = \request()->all(); + $messages = [ + 'longitude.required' => '经度必填', + 'latitude.required' => '纬度必填', + 'course_id.required' => '课表id必填', + ]; + $validator = Validator::make($all, [ + 'longitude' => 'required', + 'latitude' => 'required', + 'course_id' => 'required' + ], $messages); + if ($validator->fails()) { + return $this->fail([ResponseCode::ERROR_PARAMETER, implode(',', $validator->errors()->all())]); + } + // 获取打卡范围,千米 + $content_check_range = Config::getValueByKey('content_check_range'); + $course = Course::find($all['course_id']); + $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", diff --git a/routes/api.php b/routes/api.php index 33aa168..de06969 100755 --- a/routes/api.php +++ b/routes/api.php @@ -284,8 +284,10 @@ Route::group(["namespace" => "Mobile", "prefix" => "mobile"], function () { Route::get('course/contents', [\App\Http\Controllers\Mobile\CourseController::class, "contents"]); // 计算距离 Route::get('course/distance', [\App\Http\Controllers\Mobile\CourseController::class, "distance"]); - // 签到 + // 课堂签到 Route::get('course/content-check', [\App\Http\Controllers\Mobile\CourseController::class, "contentCheck"]); + // 课程签到 + Route::get('course/course-content-check', [\App\Http\Controllers\Mobile\CourseController::class, "courseContentCheck"]); // 签到列表 Route::get('course/content-check-list', [\App\Http\Controllers\Mobile\CourseController::class, "contentCheckList"]); // 校友库