From 25e1cd6add580cb41a8c780e3369616b3891ffdc Mon Sep 17 00:00:00 2001 From: cody <648753004@qq.com> Date: Mon, 15 Dec 2025 11:08:10 +0800 Subject: [PATCH] update --- .../Controllers/Mobile/CourseController.php | 179 +++++++++++------- 1 file changed, 115 insertions(+), 64 deletions(-) diff --git a/app/Http/Controllers/Mobile/CourseController.php b/app/Http/Controllers/Mobile/CourseController.php index 3694059..7b29b3f 100755 --- a/app/Http/Controllers/Mobile/CourseController.php +++ b/app/Http/Controllers/Mobile/CourseController.php @@ -16,6 +16,7 @@ use App\Models\CourseContent; use App\Models\CourseContentCheck; use App\Models\CourseContentEvaluation; use App\Models\CourseContentEvaluationForm; +use App\Models\CourseForm; use App\Models\CourseSign; use App\Models\CourseType; use App\Models\Notice; @@ -110,13 +111,23 @@ class CourseController extends CommonController if ($validator->fails()) { return $this->fail([ResponseCode::ERROR_PARAMETER, implode(',', $validator->errors()->all())]); } - $detail = Course::with(['qunImage', 'typeDetail', 'courseForms', 'teacher', 'courseContentEvaluation' => function ($query) { - $query->with(['courseContentEvaluationAsks' => function ($q) { - $q->orderBy('sort', 'asc'); - }]); - }])->withCount(['courseSigns as my_user' => function ($query) { - $query->where('user_id', $this->getUserId()); - }])->find($all['course_id']); + $detail = Course::with([ + 'qunImage', + 'typeDetail', + 'courseForms', + 'teacher', + 'courseContentEvaluation' => function ($query) { + $query->with([ + 'courseContentEvaluationAsks' => function ($q) { + $q->orderBy('sort', 'asc'); + } + ]); + } + ])->withCount([ + 'courseSigns as my_user' => function ($query) { + $query->where('user_id', $this->getUserId()); + } + ])->find($all['course_id']); return $this->success($detail); } @@ -144,9 +155,11 @@ class CourseController extends CommonController if ($validator->fails()) { return $this->fail([ResponseCode::ERROR_PARAMETER, implode(',', $validator->errors()->all())]); } - $detail = CourseContentEvaluation::with(['courseContentEvaluationAsks' => function ($q) { - $q->with('courseContent.teacher')->orderBy('sort', 'asc'); - }])->find($all['course_content_evaluation_id']); + $detail = CourseContentEvaluation::with([ + 'courseContentEvaluationAsks' => function ($q) { + $q->with('courseContent.teacher')->orderBy('sort', 'asc'); + } + ])->find($all['course_content_evaluation_id']); return $this->success($detail); } @@ -224,6 +237,33 @@ class CourseController extends CommonController return $this->fail([ResponseCode::ERROR_BUSINESS, '报名已结束']); } } + // 检测必填字段 + $requiredFields = CourseForm::where('course_id', $all['course_id']) + ->where('rule', 'like', '%required%') + ->get(['field', 'name']); + if ($requiredFields->count() > 0) { + // 将 data 数组转换为以 field 为 key 的关联数组 + $dataArray = []; + if (isset($all['data']) && is_array($all['data'])) { + foreach ($all['data'] as $item) { + if (isset($item['field'])) { + $dataArray[$item['field']] = $item['value'] ?? null; + } + } + } + // 检查必填字段 + $missingFields = []; + foreach ($requiredFields as $field) { + $fieldValue = $dataArray[$field->field] ?? null; + // 检查字段是否存在且值不为空(null、空字符串视为空,0是有效值) + if ($fieldValue === null || $fieldValue === '') { + $missingFields[] = $field->name; + } + } + if (!empty($missingFields)) { + return $this->fail([ResponseCode::ERROR_PARAMETER, '以下字段为必填项:' . implode('、', $missingFields)]); + } + } $result = CourseSign::create([ 'is_change' => $all['is_change'] ?? 0, 'course_id' => $all['course_id'], @@ -258,9 +298,11 @@ class CourseController extends CommonController */ public function myCourse() { - $list = Course::with('typeDetail', 'courseContentEvaluation')->with(['courseSigns' => function ($query) { - $query->where('user_id', $this->getUserId()); - }])->whereHas('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()); })->where('is_virtual', 0)->orderBy('id', 'desc')->paginate($all['page_size'] ?? 20); return $this->success(compact('list')); @@ -325,11 +367,18 @@ class CourseController extends CommonController if ($validator->fails()) { return $this->fail([ResponseCode::ERROR_PARAMETER, implode(',', $validator->errors()->all())]); } - $detail = CourseContent::with(['course', 'teacher', 'courseKeeps', 'courseContentEvaluation' => function ($query) { - $query->with(['courseContentEvaluationAsks' => function ($q) { - $q->orderBy('sort'); - }]); - }])->find($all['course_content_id']); + $detail = CourseContent::with([ + 'course', + 'teacher', + 'courseKeeps', + 'courseContentEvaluation' => function ($query) { + $query->with([ + 'courseContentEvaluationAsks' => function ($q) { + $q->orderBy('sort'); + } + ]); + } + ])->find($all['course_content_id']); return $this->success($detail); } @@ -569,7 +618,7 @@ class CourseController extends CommonController // 获取打卡范围,千米 // $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']); + // $distance = getDistance($courseContent->longitude, $courseContent->latitude, $all['longitude'], $all['latitude']); // if ($distance > $content_check_range) { // return $this->fail([ResponseCode::ERROR_BUSINESS, '超出打卡范围']); // } @@ -654,7 +703,7 @@ class CourseController extends CommonController // 获取打卡范围,千米 $content_check_range = Config::getValueByKey('content_check_range'); $course = Course::find($all['course_id']); -// if (empty($course->longitude) || empty($course->latitude)) { + // if (empty($course->longitude) || empty($course->latitude)) { // return $this->fail([ResponseCode::ERROR_BUSINESS, '请先设置课程经纬度']); // } // $distance = getDistance($course->longitude, $course->latitude, $all['longitude'], $all['latitude']); @@ -751,53 +800,55 @@ class CourseController extends CommonController if ($all['type'] == 2) { $query->where('status', 1); } - })->with(['courseSigns' => function ($query) use ($all) { - $query->where('status', 1)->whereHas('course', function ($q) { - $q->where('is_fee', 1); - })->with('course.teacher', 'course.typeDetail') - ->orderByRaw("FIELD(fee_status, 1, 0, 2,3)"); - if (isset($all['course_id'])) { - $query->where('course_id', $all['course_id']); - } - }])->where(function ($query) use ($all) { - if ($all['type'] == 1) { - $query->where('is_schoolmate', 1); - } - if (isset($all['name'])) { - $query->where('name', 'like', '%' . $all['name'] . '%'); - } - if (isset($all['company_business'])) { - $query->where('company_business', 'like', '%' . $all['company_business'] . '%'); - } - if (isset($all['company_name'])) { - $query->where('company_name', 'like', '%' . $all['company_name'] . '%'); - } - if (isset($all['company_position'])) { - $query->where('company_position', $all['company_position']); - } - if (isset($all['company_area'])) { - $query->where('company_area', 'like', '%' . $all['company_area'] . '%'); - } - if (isset($all['company_type'])) { - $company_type = explode(',', $all['company_type']); - $query->where(function ($q) use ($company_type) { - foreach ($company_type as $v) { - $q->orWhereRaw('FIND_IN_SET(?, company_type)', [$v]); + })->with([ + 'courseSigns' => function ($query) use ($all) { + $query->where('status', 1)->whereHas('course', function ($q) { + $q->where('is_fee', 1); + })->with('course.teacher', 'course.typeDetail') + ->orderByRaw("FIELD(fee_status, 1, 0, 2,3)"); + if (isset($all['course_id'])) { + $query->where('course_id', $all['course_id']); + } } - }); - } - if (isset($all['company_industry'])) { - $company_industry = explode(',', $all['company_industry']); - $query->where(function ($q) use ($company_industry) { - foreach ($company_industry as $v) { - $q->orWhereRaw('FIND_IN_SET(?, company_industry)', [$v]); + ])->where(function ($query) use ($all) { + if ($all['type'] == 1) { + $query->where('is_schoolmate', 1); + } + if (isset($all['name'])) { + $query->where('name', 'like', '%' . $all['name'] . '%'); + } + if (isset($all['company_business'])) { + $query->where('company_business', 'like', '%' . $all['company_business'] . '%'); + } + if (isset($all['company_name'])) { + $query->where('company_name', 'like', '%' . $all['company_name'] . '%'); + } + if (isset($all['company_position'])) { + $query->where('company_position', $all['company_position']); + } + if (isset($all['company_area'])) { + $query->where('company_area', 'like', '%' . $all['company_area'] . '%'); + } + if (isset($all['company_type'])) { + $company_type = explode(',', $all['company_type']); + $query->where(function ($q) use ($company_type) { + foreach ($company_type as $v) { + $q->orWhereRaw('FIND_IN_SET(?, company_type)', [$v]); + } + }); + } + if (isset($all['company_industry'])) { + $company_industry = explode(',', $all['company_industry']); + $query->where(function ($q) use ($company_industry) { + foreach ($company_industry as $v) { + $q->orWhereRaw('FIND_IN_SET(?, company_industry)', [$v]); + } + }); + } + if (isset($all['letter'])) { + $query->where('letter', $all['letter']); } }); - } - if (isset($all['letter'])) { - $query->where('letter', $all['letter']); - } - }); if (isset($all['type']) && $all['type'] == 2) { $list = $list->orderBy('letter')->paginate(10); } else {