CustomtaskCronService.class.php
4.8 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
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
<?php
/**
* Created by PhpStorm.
* User: liyifei2012it
* Date: 17/5/18
* Time: 11:36
*/
namespace Common\Service;
use Common\Model\CustomtaskCronModel;
use VcySDK\Cron;
use VcySDK\Service;
use Think\Log;
class CustomtaskCronService extends AbstractService
{
// 构造方法
public function __construct()
{
parent::__construct();
$this->_d = new CustomtaskCronModel();
}
/**
* @desc 创建定时发送常规任务的计划任务
* @author tangxingguo
* @param array $cunstomtask 常规任务信息
* @return bool
*/
public function sendCustomtask($cunstomtask)
{
if ($cunstomtask['start_time'] <= MILLI_TIME) {
return false;
}
// 创建计划任务
$cronSdk = new Cron(Service::instance());
$cronTime = rgmdate($cunstomtask['start_time'], '0 i H d m ? Y');
$result = $cronSdk->add([
'crRemark' => sprintf('%s/%s/%s/SendCustomtask', QY_DOMAIN, APP_IDENTIFIER, $cunstomtask['customtask_id']),
'crDescription' => '定时发布常规任务',
'crReqUrl' => oaUrl('Frontend/Callback/SendCustomtask/Index', ['customtask_id' => $cunstomtask['customtask_id']]),
'crMethod' => 'GET',
'crCron' => $cronTime,
]);
// 记录计划任务
if (is_array($result) && isset($result['crId'])) {
$this->insert([
'customtask_id' => $cunstomtask['customtask_id'],
'cron_id' => $result['crId'],
]);
// 更新计划任务回调地址
$cronSdk->update([
'crId' => $result['crId'],
'crMethod' => 'GET',
'crReqUrl' => oaUrl('Frontend/Callback/SendCustomtask/Index', ['customtask_id' => $cunstomtask['customtask_id'], 'cron_id' => $result['crId']]),
]);
return true;
}
return false;
}
/**
* @desc 创建定时终止常规任务的计划任务
* @author tangxingguo
* @param array $cunstomtask 常规任务信息
* @return bool
*/
public function stopCustomtask($cunstomtask)
{
if ($cunstomtask['end_time'] <= MILLI_TIME) {
return false;
}
// 创建计划任务
$cronSdk = new Cron(Service::instance());
$cronTime = rgmdate($cunstomtask['end_time'], '0 i H d m ? Y');
$result = $cronSdk->add([
'crRemark' => sprintf('%s/%s/%s/StopCustomtask', QY_DOMAIN, APP_IDENTIFIER, $cunstomtask['customtask_id']),
'crDescription' => '定时终止常规任务',
'crReqUrl' => oaUrl('Frontend/Callback/StopCustomtask/Index', ['customtask_id' => $cunstomtask['customtask_id']]),
'crMethod' => 'GET',
'crCron' => $cronTime,
]);
// 记录计划任务
if (is_array($result) && isset($result['crId'])) {
$this->insert([
'customtask_id' => $cunstomtask['customtask_id'],
'cron_id' => $result['crId'],
]);
// 更新计划任务回调地址
$cronSdk->update([
'crId' => $result['crId'],
'crMethod' => 'GET',
'crReqUrl' => oaUrl('Frontend/Callback/StopCustomtask/Index', ['customtask_id' => $cunstomtask['customtask_id'], 'cron_id' => $result['crId']]),
]);
return true;
}
return false;
}
/**
* @desc 删除计划任务
* @author tangxingguo
* @param string $cronId 计划任务ID
* @return bool
*/
public function deleteCron_deprecated($cronId)
{
// 删除UC计划任务
$cronSdk = new Cron(Service::instance());
$cronSdk->delete($cronId);
// 删除本地计划任务表
$this->delete_by_conds(['cron_id' => $cronId]);
}
/**
* 删除计划任务
* @author zhonglei
* @param int $customtask_id 常规任务ID
* @param string $cron_id 计划任务ID,不传则删除常规任务下所有计划任务
* @return bool
*/
public function deleteCron($customtask_id, $cron_id = '')
{
$conds = ['customtask_id' => $customtask_id];
if (!empty($cron_id)) {
$conds['cron_id'] = $cron_id;
}
$list = $this->list_by_conds($conds);
if (!empty($list)) {
$cronSdk = new Cron(Service::instance());
foreach ($list as $v) {
$this->delete($v['customtask_cron_id']);
try {
$cronSdk->delete($v['cron_id']);
} catch (\Exception $e) {
Log::record("customtask cron delete fail, customtask_id: {$customtask_id}, cron_id: {$v['cron_id']}", Log::ERR);
}
}
return true;
}
return false;
}
}