master
cody 6 days ago
parent 6cab4761e4
commit 25e1cd6add

@ -16,6 +16,7 @@ use App\Models\CourseContent;
use App\Models\CourseContentCheck; use App\Models\CourseContentCheck;
use App\Models\CourseContentEvaluation; use App\Models\CourseContentEvaluation;
use App\Models\CourseContentEvaluationForm; use App\Models\CourseContentEvaluationForm;
use App\Models\CourseForm;
use App\Models\CourseSign; use App\Models\CourseSign;
use App\Models\CourseType; use App\Models\CourseType;
use App\Models\Notice; use App\Models\Notice;
@ -110,13 +111,23 @@ class CourseController extends CommonController
if ($validator->fails()) { if ($validator->fails()) {
return $this->fail([ResponseCode::ERROR_PARAMETER, implode(',', $validator->errors()->all())]); return $this->fail([ResponseCode::ERROR_PARAMETER, implode(',', $validator->errors()->all())]);
} }
$detail = Course::with(['qunImage', 'typeDetail', 'courseForms', 'teacher', 'courseContentEvaluation' => function ($query) { $detail = Course::with([
$query->with(['courseContentEvaluationAsks' => function ($q) { 'qunImage',
$q->orderBy('sort', 'asc'); 'typeDetail',
}]); 'courseForms',
}])->withCount(['courseSigns as my_user' => function ($query) { 'teacher',
$query->where('user_id', $this->getUserId()); 'courseContentEvaluation' => function ($query) {
}])->find($all['course_id']); $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); return $this->success($detail);
} }
@ -144,9 +155,11 @@ class CourseController extends CommonController
if ($validator->fails()) { if ($validator->fails()) {
return $this->fail([ResponseCode::ERROR_PARAMETER, implode(',', $validator->errors()->all())]); return $this->fail([ResponseCode::ERROR_PARAMETER, implode(',', $validator->errors()->all())]);
} }
$detail = CourseContentEvaluation::with(['courseContentEvaluationAsks' => function ($q) { $detail = CourseContentEvaluation::with([
$q->with('courseContent.teacher')->orderBy('sort', 'asc'); 'courseContentEvaluationAsks' => function ($q) {
}])->find($all['course_content_evaluation_id']); $q->with('courseContent.teacher')->orderBy('sort', 'asc');
}
])->find($all['course_content_evaluation_id']);
return $this->success($detail); return $this->success($detail);
} }
@ -224,6 +237,33 @@ class CourseController extends CommonController
return $this->fail([ResponseCode::ERROR_BUSINESS, '报名已结束']); 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([ $result = CourseSign::create([
'is_change' => $all['is_change'] ?? 0, 'is_change' => $all['is_change'] ?? 0,
'course_id' => $all['course_id'], 'course_id' => $all['course_id'],
@ -258,9 +298,11 @@ class CourseController extends CommonController
*/ */
public function myCourse() public function myCourse()
{ {
$list = Course::with('typeDetail', 'courseContentEvaluation')->with(['courseSigns' => function ($query) { $list = Course::with('typeDetail', 'courseContentEvaluation')->with([
$query->where('user_id', $this->getUserId()); 'courseSigns' => function ($query) {
}])->whereHas('courseSigns', function ($query) { $query->where('user_id', $this->getUserId());
}
])->whereHas('courseSigns', function ($query) {
$query->where('user_id', $this->getUserId()); $query->where('user_id', $this->getUserId());
})->where('is_virtual', 0)->orderBy('id', 'desc')->paginate($all['page_size'] ?? 20); })->where('is_virtual', 0)->orderBy('id', 'desc')->paginate($all['page_size'] ?? 20);
return $this->success(compact('list')); return $this->success(compact('list'));
@ -325,11 +367,18 @@ class CourseController extends CommonController
if ($validator->fails()) { if ($validator->fails()) {
return $this->fail([ResponseCode::ERROR_PARAMETER, implode(',', $validator->errors()->all())]); return $this->fail([ResponseCode::ERROR_PARAMETER, implode(',', $validator->errors()->all())]);
} }
$detail = CourseContent::with(['course', 'teacher', 'courseKeeps', 'courseContentEvaluation' => function ($query) { $detail = CourseContent::with([
$query->with(['courseContentEvaluationAsks' => function ($q) { 'course',
$q->orderBy('sort'); 'teacher',
}]); 'courseKeeps',
}])->find($all['course_content_id']); 'courseContentEvaluation' => function ($query) {
$query->with([
'courseContentEvaluationAsks' => function ($q) {
$q->orderBy('sort');
}
]);
}
])->find($all['course_content_id']);
return $this->success($detail); return $this->success($detail);
} }
@ -569,7 +618,7 @@ class CourseController extends CommonController
// 获取打卡范围,千米 // 获取打卡范围,千米
// $content_check_range = Config::getValueByKey('content_check_range'); // $content_check_range = Config::getValueByKey('content_check_range');
$courseContent = CourseContent::find($all['course_content_id']); $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) { // if ($distance > $content_check_range) {
// return $this->fail([ResponseCode::ERROR_BUSINESS, '超出打卡范围']); // return $this->fail([ResponseCode::ERROR_BUSINESS, '超出打卡范围']);
// } // }
@ -654,7 +703,7 @@ class CourseController extends CommonController
// 获取打卡范围,千米 // 获取打卡范围,千米
$content_check_range = Config::getValueByKey('content_check_range'); $content_check_range = Config::getValueByKey('content_check_range');
$course = Course::find($all['course_id']); $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, '请先设置课程经纬度']); // return $this->fail([ResponseCode::ERROR_BUSINESS, '请先设置课程经纬度']);
// } // }
// $distance = getDistance($course->longitude, $course->latitude, $all['longitude'], $all['latitude']); // $distance = getDistance($course->longitude, $course->latitude, $all['longitude'], $all['latitude']);
@ -751,53 +800,55 @@ class CourseController extends CommonController
if ($all['type'] == 2) { if ($all['type'] == 2) {
$query->where('status', 1); $query->where('status', 1);
} }
})->with(['courseSigns' => function ($query) use ($all) { })->with([
$query->where('status', 1)->whereHas('course', function ($q) { 'courseSigns' => function ($query) use ($all) {
$q->where('is_fee', 1); $query->where('status', 1)->whereHas('course', function ($q) {
})->with('course.teacher', 'course.typeDetail') $q->where('is_fee', 1);
->orderByRaw("FIELD(fee_status, 1, 0, 2,3)"); })->with('course.teacher', 'course.typeDetail')
if (isset($all['course_id'])) { ->orderByRaw("FIELD(fee_status, 1, 0, 2,3)");
$query->where('course_id', $all['course_id']); 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]);
} }
}); ])->where(function ($query) use ($all) {
} if ($all['type'] == 1) {
if (isset($all['company_industry'])) { $query->where('is_schoolmate', 1);
$company_industry = explode(',', $all['company_industry']); }
$query->where(function ($q) use ($company_industry) { if (isset($all['name'])) {
foreach ($company_industry as $v) { $query->where('name', 'like', '%' . $all['name'] . '%');
$q->orWhereRaw('FIND_IN_SET(?, company_industry)', [$v]); }
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) { if (isset($all['type']) && $all['type'] == 2) {
$list = $list->orderBy('letter')->paginate(10); $list = $list->orderBy('letter')->paginate(10);
} else { } else {

Loading…
Cancel
Save