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
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()];
|
|
}
|
|
}
|
|
}
|