CronService.class.php
3.62 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
<?php
/**
* Created by PhpStorm.
* User: liyifei2012it
* Date: 18/5/17
* Time: 23:42
*/
namespace Common\Service;
use Think\Log;
use VcySDK\Cron;
use VcySDK\Service;
use Common\Model\CronModel;
class CronService extends AbstractService
{
public function __construct()
{
parent::__construct();
$this->_d = new CronModel();
}
/**
* 创建并保存发放学分的计划任务
* @author liyifei
* @param array $article 线下课程详情
* @return bool
*/
public function saveCron($article)
{
// 是否已存在计划任务
$article_id = $article['article_id'];
$cronServ = new CronService();
$cron = $cronServ->get_by_conds(['article_id' => $article_id]);
// 计划任务参数
$cronSdk = new Cron(Service::instance());
$callback_url = 'Frontend/Callback/GrantCredit/Index';
$params = [
'crRemark' => sprintf('%s/%s/%s/GrantCredit', QY_DOMAIN, APP_IDENTIFIER, $article['article_id']),
'crDescription' => '授课结束后定时发放学分',
'crReqUrl' => oaUrl($callback_url, ['article_id' => $article['article_id']]),
'crMethod' => 'POST',
'crCron' => rgmdate($article['end_time'], '0 i H d m ? Y'),
];
// 新增计划任务
if (empty($cron)) {
try {
$result = $cronSdk->add($params);
if (is_array($result) && isset($result['crId'])) {
// 修改计划任务回调Url,加上计划任务ID
$cronSdk->update([
'crId' => $result['crId'],
'crReqUrl' => oaUrl($callback_url, ['article_id' => $article['article_id'], 'cron_id' => $result['crId']]),
]);
} else {
Log::record('create cron fail: ' . var_export($result, true), Log::ERR);
}
} catch (\Exception $e) {
Log::record('create update cron fail: ' . $e->getMessage(), Log::ERR);
}
// 本地保存计划任务
if (isset($result['crId'])) {
$cronServ->insert(['article_id' => $article['article_id'], 'cron_id' => $result['crId']]);
}
// 修改计划任务
} else {
unset($params['crReqUrl']);
$params['crId'] = $cron['cron_id'];
try {
// 修改计划任务回调Url,加上计划任务ID
$cronSdk->update($params);
} catch (\Exception $e) {
Log::record('update cron fail: ' . $e->getMessage(), Log::ERR);
}
}
return true;
}
/**
* 删除计划任务(本地+UC)
* @author liyifei
* @param string $cron_id UC计划任务ID
* @param int $article_id 线下课程ID
* @return bool
*/
public function delCron($cron_id = '', $article_id = 0)
{
if (empty($cron_id) && empty($article_id)) {
return false;
}
// 删除本地计划任务
$conds = [];
if (strlen($cron_id) > 0) {
$conds['cron_id'] = $cron_id;
}
if ($article_id > 0) {
$conds['article_id'] = $article_id;
}
$cronServ = new CronService();
$cronServ->delete_by_conds($conds);
// 删除UC计划任务
try {
$cronSdk = new Cron(Service::instance());
$cronSdk->delete($cron_id);
} catch (\Exception $e) {
Log::record('delete uc crontab fail: ' . $e->getMessage(), Log::ERR);
}
return true;
}
}