智慧教务系统
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

326 lines
13 KiB

<?php
// +----------------------------------------------------------------------
// | Niucloud-admin 企业快速开发的多应用管理平台
// +----------------------------------------------------------------------
// | 官方网址:https://www.niucloud.com
// +----------------------------------------------------------------------
// | niucloud团队 版权所有 开源版本可自由商用
// +----------------------------------------------------------------------
// | Author: Niucloud Team
// +----------------------------------------------------------------------
namespace app\service\api\apiService;
use app\model\diy_form\DiyForm;
use app\model\diy_form\DiyFormRecords;
use core\base\BaseApiService;
/**
* 学习计划API服务层
* Class StudyPlanService
* @package app\service\api\apiService
*/
class StudyPlanService extends BaseApiService
{
public function __construct()
{
parent::__construct();
}
/**
* 获取学习计划列表
* @param int $studentId 学员ID
* @return array
*/
public function getList($studentId)
{
try {
// 获取学习计划表单ID
$studyPlanForm = DiyForm::where('type', 'study_plan')->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()];
}
}
}