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
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)
|
|
{
|
|
// 可以在这里实现通知功能
|
|
// 比如发送短信、邮件、站内通知等
|
|
}
|
|
|
|
}
|