find(); if (!$studyPlanForm) { return ['code' => 0, 'data' => [], 'msg' => '学习计划表单不存在']; } // 查询学习计划记录 $records = DiyFormRecords::where('form_id', $studyPlanForm->form_id) ->where('student_id', $studentId) ->order('create_time desc') ->select() ->toArray(); $result = []; foreach ($records as $record) { $value = is_string($record['value']) ? (json_decode($record['value'], true) ?: []) : (is_array($record['value']) ? $record['value'] : []); $result[] = [ 'id' => $record['record_id'], 'student_id' => $record['student_id'], 'plan_name' => $value['plan_name'] ?? '', 'plan_content' => $value['plan_content'] ?? '', 'plan_type' => $value['plan_type'] ?? '常规计划', 'status' => $value['status'] ?? 'active', 'progress' => (int)($value['progress'] ?? 0), 'start_date' => $value['start_date'] ?? '', 'end_date' => $value['end_date'] ?? '', 'target_goals' => $value['target_goals'] ?? '', 'learning_materials' => $value['learning_materials'] ?? '', 'evaluation_criteria' => $value['evaluation_criteria'] ?? '', 'remark' => $value['remark'] ?? '', 'create_time' => is_numeric($record['create_time']) ? date('Y-m-d H:i:s', $record['create_time']) : $record['create_time'], 'update_time' => is_numeric($record['create_time']) ? date('Y-m-d H:i:s', $record['create_time']) : $record['create_time'] ]; } return ['code' => 1, 'data' => $result, 'msg' => '获取成功']; } catch (\Exception $e) { return ['code' => 0, 'data' => [], 'msg' => '获取失败:' . $e->getMessage()]; } } /** * 获取学习计划详情 * @param int $recordId 记录ID * @return array */ public function getInfo($recordId) { try { $record = DiyFormRecords::find($recordId); if (!$record) { return ['code' => 0, 'data' => [], 'msg' => '记录不存在']; } $value = is_string($record->value) ? (json_decode($record->value, true) ?: []) : (is_array($record->value) ? $record->value : []); $result = [ 'id' => $record->record_id, 'student_id' => $record->student_id, 'plan_name' => $value['plan_name'] ?? '', 'plan_content' => $value['plan_content'] ?? '', 'plan_type' => $value['plan_type'] ?? '常规计划', 'status' => $value['status'] ?? 'active', 'progress' => (int)($value['progress'] ?? 0), 'start_date' => $value['start_date'] ?? '', 'end_date' => $value['end_date'] ?? '', 'target_goals' => $value['target_goals'] ?? '', 'learning_materials' => $value['learning_materials'] ?? '', 'evaluation_criteria' => $value['evaluation_criteria'] ?? '', 'remark' => $value['remark'] ?? '', 'create_time' => is_numeric($record->create_time) ? date('Y-m-d H:i:s', $record->create_time) : $record->create_time, 'update_time' => is_numeric($record->create_time) ? date('Y-m-d H:i:s', $record->create_time) : $record->create_time ]; return ['code' => 1, 'data' => $result, 'msg' => '获取成功']; } catch (\Exception $e) { return ['code' => 0, 'data' => [], 'msg' => '获取失败:' . $e->getMessage()]; } } /** * 添加学习计划 * @param array $data * @return array */ public function add(array $data) { try { // 获取学习计划表单ID $studyPlanForm = DiyForm::where('type', 'study_plan')->find(); if (!$studyPlanForm) { return ['code' => 0, 'data' => [], 'msg' => '学习计划表单不存在']; } // 构建表单数据 $formValue = [ 'plan_name' => $data['plan_name'], 'plan_content' => $data['plan_content'], 'plan_type' => $data['plan_type'] ?? '常规计划', 'status' => $data['status'] ?? 'active', 'progress' => (int)($data['progress'] ?? 0), 'start_date' => $data['start_date'] ?? '', 'end_date' => $data['end_date'] ?? '', 'target_goals' => $data['target_goals'] ?? '', 'learning_materials' => $data['learning_materials'] ?? '', 'evaluation_criteria' => $data['evaluation_criteria'] ?? '', 'remark' => $data['remark'] ?? '' ]; // 创建记录 $record = DiyFormRecords::create([ 'form_id' => $studyPlanForm->form_id, 'value' => json_encode($formValue), 'member_id' => $this->member_id ?? 0, 'relate_id' => 0, 'student_id' => $data['student_id'], 'create_time' => time() ]); if ($record) { $result = [ 'id' => $record->record_id, 'student_id' => $record->student_id, 'plan_name' => $formValue['plan_name'], 'plan_content' => $formValue['plan_content'], 'plan_type' => $formValue['plan_type'], 'status' => $formValue['status'], 'progress' => $formValue['progress'], 'start_date' => $formValue['start_date'], 'end_date' => $formValue['end_date'], 'target_goals' => $formValue['target_goals'], 'learning_materials' => $formValue['learning_materials'], 'evaluation_criteria' => $formValue['evaluation_criteria'], 'remark' => $formValue['remark'], 'create_time' => is_numeric($record->create_time) ? date('Y-m-d H:i:s', $record->create_time) : $record->create_time ]; return ['code' => 1, 'data' => $result, 'msg' => '添加成功']; } else { return ['code' => 0, 'data' => [], 'msg' => '添加失败']; } } catch (\Exception $e) { return ['code' => 0, 'data' => [], 'msg' => '添加失败:' . $e->getMessage()]; } } /** * 编辑学习计划 * @param array $data * @return array */ public function edit(array $data) { try { $record = DiyFormRecords::find($data['record_id']); if (!$record) { return ['code' => 0, 'data' => [], 'msg' => '记录不存在']; } // 获取现有数据 $existingValue = is_string($record->value) ? (json_decode($record->value, true) ?: []) : (is_array($record->value) ? $record->value : []); // 更新字段 $formValue = $existingValue; $updateFields = [ 'plan_name', 'plan_content', 'plan_type', 'status', 'progress', 'start_date', 'end_date', 'target_goals', 'learning_materials', 'evaluation_criteria', 'remark' ]; foreach ($updateFields as $field) { if (isset($data[$field])) { $formValue[$field] = ($field === 'progress') ? (int)$data[$field] : $data[$field]; } } // 更新记录 $result = $record->save([ 'value' => json_encode($formValue) ]); if ($result !== false) { $resultData = [ 'id' => $record->record_id, 'student_id' => $record->student_id, 'plan_name' => $formValue['plan_name'] ?? '', 'plan_content' => $formValue['plan_content'] ?? '', 'plan_type' => $formValue['plan_type'] ?? '常规计划', 'status' => $formValue['status'] ?? 'active', 'progress' => (int)($formValue['progress'] ?? 0), 'start_date' => $formValue['start_date'] ?? '', 'end_date' => $formValue['end_date'] ?? '', 'target_goals' => $formValue['target_goals'] ?? '', 'learning_materials' => $formValue['learning_materials'] ?? '', 'evaluation_criteria' => $formValue['evaluation_criteria'] ?? '', 'remark' => $formValue['remark'] ?? '', 'create_time' => is_numeric($record->create_time) ? date('Y-m-d H:i:s', $record->create_time) : $record->create_time ]; return ['code' => 1, 'data' => $resultData, 'msg' => '修改成功']; } else { return ['code' => 0, 'data' => [], 'msg' => '修改失败']; } } catch (\Exception $e) { return ['code' => 0, 'data' => [], 'msg' => '修改失败:' . $e->getMessage()]; } } /** * 删除学习计划 * @param int $recordId * @return array */ public function delete($recordId) { try { $record = DiyFormRecords::find($recordId); if (!$record) { return ['code' => 0, 'data' => [], 'msg' => '记录不存在']; } $result = $record->delete(); if ($result) { return ['code' => 1, 'data' => [], 'msg' => '删除成功']; } else { return ['code' => 0, 'data' => [], 'msg' => '删除失败']; } } catch (\Exception $e) { return ['code' => 0, 'data' => [], 'msg' => '删除失败:' . $e->getMessage()]; } } /** * 更新学习计划进度 * @param int $recordId * @param int $progress * @return array */ public function updateProgress($recordId, $progress) { try { $record = DiyFormRecords::find($recordId); if (!$record) { return ['code' => 0, 'data' => [], 'msg' => '记录不存在']; } // 获取现有数据 $existingValue = is_string($record->value) ? (json_decode($record->value, true) ?: []) : (is_array($record->value) ? $record->value : []); $existingValue['progress'] = (int)$progress; // 根据进度自动更新状态 if ($progress >= 100) { $existingValue['status'] = 'completed'; } elseif ($progress > 0) { $existingValue['status'] = 'in_progress'; } else { $existingValue['status'] = 'active'; } // 更新记录 $result = $record->save([ 'value' => json_encode($existingValue) ]); if ($result !== false) { $resultData = [ 'id' => $record->record_id, 'progress' => (int)$progress, 'status' => $existingValue['status'] ]; return ['code' => 1, 'data' => $resultData, 'msg' => '更新成功']; } else { return ['code' => 0, 'data' => [], 'msg' => '更新失败']; } } catch (\Exception $e) { return ['code' => 0, 'data' => [], 'msg' => '更新失败:' . $e->getMessage()]; } } }