智慧教务系统
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.
 
 
 
 
 
 

115 lines
3.7 KiB

<?php
// +----------------------------------------------------------------------
// | Niucloud-admin 企业快速开发的多应用管理平台
// +----------------------------------------------------------------------
// | 官方网址:https://www.niucloud.com
// +----------------------------------------------------------------------
// | niucloud团队 版权所有 开源版本可自由商用
// +----------------------------------------------------------------------
// | Author: Niucloud Team
// +----------------------------------------------------------------------
namespace app\job\schedule;
use app\model\service_logs\ServiceLogs;
use app\model\personnel\Personnel;
use app\service\admin\service_logs\ServiceLogsDistributionService;
use app\service\core\notice\NoticeService;
use core\base\BaseJob;
use think\facade\Db;
use think\facade\Log;
/**
* 服务记录分发定时任务
* 用于给教务和教练分发服务记录通知
*/
class ServiceLogsDistribution extends BaseJob
{
/**
* 执行任务
* @return bool
*/
public function doJob()
{
Log::write('服务记录分发任务开始 ' . date('Y-m-d H:i:s'));
try {
// 检查并更新人员变更
$this->checkPersonnelChanges();
// 生成新的服务记录
$this->generateNewServiceLogs();
Log::write('服务记录分发任务完成 ' . date('Y-m-d H:i:s'));
} catch (\Exception $e) {
Log::write('服务记录分发任务异常: ' . $e->getMessage());
return false;
}
return true;
}
/**
* 检查人员变更
*/
private function checkPersonnelChanges()
{
$service = new ServiceLogsDistributionService();
$result = $service->checkAndUpdatePersonnelChanges();
if ($result['success']) {
Log::write("人员变更检查完成,更新了 {$result['updated_count']} 条记录");
} else {
Log::write("人员变更检查失败: {$result['message']}");
}
}
/**
* 生成新的服务记录
*/
private function generateNewServiceLogs()
{
// 获取所有有效的学员课程,但之前没有教练或教务,现在有了的
$courses = Db::table('school_student_courses')
->where('status', 1)
->where(function ($query) {
$query->where('main_coach_id', '>', 0)
->whereOr('education_id', '>', 0);
})
->select()
->toArray();
$service = new ServiceLogsDistributionService();
$totalGenerated = 0;
foreach ($courses as $course) {
// 检查是否已经为这个课程生成过服务记录
$existingLogs = Db::table('school_service_logs')
->where('course_id', $course['id'])
->count();
// 如果没有服务记录,说明是新设置的教练/教务,需要生成服务记录
if ($existingLogs == 0) {
$result = $service->generateServiceLogs($course);
if ($result['success']) {
$totalGenerated += $result['generated_count'];
}
}
}
Log::write("本次任务为新课程生成了 {$totalGenerated} 条服务记录");
}
/**
* 发送服务记录通知
* @param Personnel $staff 接收人员
* @param ServiceLogs $serviceLog 服务记录
* @param string $type 通知类型 (academic|coach)
*/
private function sendServiceLogNotice($staff, $serviceLog, $type)
{
// 可以在这里实现通知功能
// 比如发送短信、邮件、站内通知等
}
}