|
@@ -6,10 +6,13 @@ use App\Log;
|
6
|
6
|
use App\Models\AuthorizeCorp;
|
7
|
7
|
use App\Models\BatchMarkTag;
|
8
|
8
|
use App\Models\BatchMarkTagRecord;
|
|
9
|
+use App\Models\CustomerDetails;
|
9
|
10
|
use App\Models\DjUser;
|
10
|
11
|
use App\Models\Tag;
|
11
|
12
|
use App\RedisModel;
|
|
13
|
+use App\Service\TagService;
|
12
|
14
|
use App\Support\EmailQueue;
|
|
15
|
+use App\Support\qyApi\QyCommon;
|
13
|
16
|
use Illuminate\Console\Command;
|
14
|
17
|
|
15
|
18
|
class BatchMarkTagDeal extends Command
|
|
@@ -52,9 +55,9 @@ class BatchMarkTagDeal extends Command
|
52
|
55
|
try {
|
53
|
56
|
$this->createTask($redisVal);
|
54
|
57
|
} catch (\Exception $e) {
|
55
|
|
- EmailQueue::rPush('创建客户批量打标签出现异常', $e->getTraceAsString(), $this->emailReceiver, $this->emailSender);
|
56
|
|
- Log::logError('创建客户批量打标签出现异常', [
|
57
|
|
- 'line' => $e->getLine(), 'msg' => $e->getMessage(), 'param' => $taskId
|
|
58
|
+ EmailQueue::rPush('客户批量打标签处理任务出现异常', $e->getTraceAsString(), $this->emailReceiver, $this->emailSender);
|
|
59
|
+ Log::logError('程序异常', [
|
|
60
|
+ 'line' => $e->getLine(), 'msg' => $e->getMessage(), 'param' => $redisVal
|
58
|
61
|
], $this->logName);
|
59
|
62
|
|
60
|
63
|
return false;
|
|
@@ -66,7 +69,7 @@ class BatchMarkTagDeal extends Command
|
66
|
69
|
private function createTask($redisVal) {
|
67
|
70
|
$redisData = json_decode($redisVal, 1);
|
68
|
71
|
if(empty($redisData) || empty($redisData['task_id']) || empty($redisData['record_id'])) {
|
69
|
|
- Log::logError('处理客户批量打标签 - 队里数据异常', [$redisData], $this->logName);
|
|
72
|
+ Log::logError('队列数据异常', [$redisData], $this->logName);
|
70
|
73
|
EmailQueue::rPush('处理客户批量打标签 - 队里数据异常', $redisVal, $this->emailReceiver, $this->emailSender);
|
71
|
74
|
return false;
|
72
|
75
|
}
|
|
@@ -78,7 +81,7 @@ class BatchMarkTagDeal extends Command
|
78
|
81
|
Log::logError('根据任务ID查询任务信息失败', ['task_id' => $taskId], $this->logName);
|
79
|
82
|
EmailQueue::rPush('处理客户批量打标签 - 根据任务ID查询任务信息失败', $redisVal, $this->emailReceiver, $this->emailSender);
|
80
|
83
|
$status = -1;
|
81
|
|
- BatchMarkTagRecord::updateStatus($recordId, $status);
|
|
84
|
+ BatchMarkTagRecord::updateData($recordId, ['status' => $status]);
|
82
|
85
|
return false;
|
83
|
86
|
}
|
84
|
87
|
|
|
@@ -89,7 +92,7 @@ class BatchMarkTagDeal extends Command
|
89
|
92
|
Log::logError('根据记录ID查询记录信息失败', ['record_id' => $recordId], $this->logName);
|
90
|
93
|
EmailQueue::rPush('处理客户批量打标签 - 根据记录ID查询记录信息失败', $redisVal, $this->emailReceiver, $this->emailSender);
|
91
|
94
|
$status = -1;
|
92
|
|
- BatchMarkTagRecord::updateStatus($recordId, $status);
|
|
95
|
+ BatchMarkTagRecord::updateData($recordId, ['status' => $status]);
|
93
|
96
|
return false;
|
94
|
97
|
}
|
95
|
98
|
|
|
@@ -104,7 +107,7 @@ class BatchMarkTagDeal extends Command
|
104
|
107
|
Log::logError('根据记录ID查询记录信息失败', ['record_id' => $recordInfo['id']], $this->logName);
|
105
|
108
|
EmailQueue::rPush('处理客户批量打标签 - 根据记录ID查询记录信息失败', 'task_id:'.$taskInfo['id'].'; record_id:'.$recordInfo['id'], $this->emailReceiver, $this->emailSender);
|
106
|
109
|
$status = -1;
|
107
|
|
- BatchMarkTagRecord::updateStatus($recordInfo['id'], $status);
|
|
110
|
+ BatchMarkTagRecord::updateData($recordInfo['id'], ['status' => $status]);
|
108
|
111
|
return false;
|
109
|
112
|
}
|
110
|
113
|
|
|
@@ -114,7 +117,7 @@ class BatchMarkTagDeal extends Command
|
114
|
117
|
->whereIn('tag_md5', $tagList)->get();
|
115
|
118
|
$newTagList = $newTagList->isNotEmpty() ? array_column($newTagList->toArray(), 'tag_id') : [];
|
116
|
119
|
|
117
|
|
- $stat = ['success' => 0, 'fail' => 0];
|
|
120
|
+ $update = ['exec_success' => 0, 'exec_fail' => 0];
|
118
|
121
|
foreach ($externalUserIdList as $externalUserId) {
|
119
|
122
|
if(1 == $taskInfo['type']) {
|
120
|
123
|
$newAddTagIdList = $newTagList;
|
|
@@ -124,8 +127,33 @@ class BatchMarkTagDeal extends Command
|
124
|
127
|
$newRemoveTagIdList = $newTagList;
|
125
|
128
|
}
|
126
|
129
|
|
127
|
|
- $this->markTag($taskInfo['corpid'], $recordInfo['user_id'], $externalUserId, $newAddTagIdList, $newRemoveTagIdList);
|
|
130
|
+ $res = $this->markTag($taskInfo['corpid'], $recordInfo['user_id'], $externalUserId, $newAddTagIdList, $newRemoveTagIdList);
|
|
131
|
+ if($res) {
|
|
132
|
+ $update['exec_success']++;
|
|
133
|
+ } else {
|
|
134
|
+ $update['exec_fail']++;
|
|
135
|
+ }
|
|
136
|
+ }
|
|
137
|
+
|
|
138
|
+ # 验证总数
|
|
139
|
+ if($update['success'] + $update['exec_fail'] != $recordInfo['exec_total']) {
|
|
140
|
+ Log::logError('程序异常', ['record_id' => $recordInfo['id'], 'stat' => $update], $this->logName);
|
|
141
|
+ EmailQueue::rPush('客户批量打标签 - 处理数据总数与待处理数据总数不一致', json_encode(['record_id' => $recordInfo['id'], 'stat' => $update]), $this->emailReceiver, $this->emailSender);
|
128
|
142
|
}
|
|
143
|
+
|
|
144
|
+ # 更新任务状态
|
|
145
|
+ if($update['fail'] == $recordInfo['exec_total']) {
|
|
146
|
+ $update['status'] = -1;
|
|
147
|
+ } else {
|
|
148
|
+ $update['status'] = 1;
|
|
149
|
+ }
|
|
150
|
+ $res = BatchMarkTagRecord::updateData($recordInfo['id'], $update);
|
|
151
|
+ if(!$res) {
|
|
152
|
+ Log::logError('数据更新失败', ['record_id' => $recordInfo['id'], 'update' => $update], $this->logName);
|
|
153
|
+ }
|
|
154
|
+
|
|
155
|
+ # 判断总体任务是否执行完成
|
|
156
|
+ $this->chargeTaskStatus($taskInfo['id']);
|
129
|
157
|
}
|
130
|
158
|
|
131
|
159
|
private function markTag($corpid, $userId, $externalUserId, $newAddTagIdList, $newRemoveTagIdList, $retry = 0) {
|
|
@@ -148,24 +176,44 @@ class BatchMarkTagDeal extends Command
|
148
|
176
|
|
149
|
177
|
return true;
|
150
|
178
|
} else {
|
151
|
|
- if(!in_array($responseData['errcode'], [84061, 60111])) { # 无法处理的状态码:没有好友关系或者客服ID不存在
|
|
179
|
+ if( $responseData['errcode'] != 84061 ) { # 无法处理的状态码:没有好友关系
|
152
|
180
|
// 判断重试次数
|
153
|
|
- if($ <= 5) {
|
154
|
|
- $re_times++;
|
155
|
|
- $data['re_times'] = $re_times;
|
156
|
|
- // RedisModel::lPush(CustomerTagService::CUSTOMER_TAG_MARK_RDS, json_encode($data));
|
|
181
|
+ if($retry <= 5) {
|
|
182
|
+ $retry++;
|
|
183
|
+ return $this->markTag($corpid, $userId, $externalUserId, $newAddTagIdList, $newRemoveTagIdList, $retry);
|
157
|
184
|
} else {
|
|
185
|
+ $params = ['corpid' => $corpid, 'user_id' => $userId, 'external_userid' => $externalUserId, 'add_tag_id_list' => $newAddTagIdList, 'remove_tag_id_list' => $newRemoveTagIdList];
|
158
|
186
|
// 还是一直失败,则不再请求,日志记录一下
|
159
|
|
- Log::logError('', [
|
160
|
|
- 'corpid' => $corpid,
|
161
|
|
- 'param' => $data,
|
162
|
|
- 'message' => '请求企微打标签接口3次重试均失败',
|
|
187
|
+ Log::logError('请求企微打标签接口3次重试均失败', [
|
|
188
|
+ 'param' => $params,
|
|
189
|
+ 'response' => $responseData,
|
163
|
190
|
], $this->logName);
|
164
|
|
- EmailQueue::rPush('请求企微打标签接口3次重试均失败', json_encode(['params' => $data, 'res' => $responseData], 256), $this->emailReceiver, $this->emailSender);
|
165
|
|
- // 邮件报警
|
166
|
|
- // $this->exceptionHandler(json_encode(['params' => $data, 'msg' => '请求企微打标签接口3次重试均失败', 'res' => $responseData], 256));
|
|
191
|
+ EmailQueue::rPush('请求企微打标签接口3次重试均失败', json_encode(['params' => $params, 'res' => $responseData], 256), $this->emailReceiver, $this->emailSender);
|
|
192
|
+ return false;
|
167
|
193
|
}
|
168
|
|
-// }
|
|
194
|
+ } else {
|
|
195
|
+ //todo 隔1小时报警一次
|
|
196
|
+
|
|
197
|
+ return false;
|
|
198
|
+ }
|
|
199
|
+ }
|
|
200
|
+ }
|
|
201
|
+
|
|
202
|
+ private function chargeTaskStatus($taskId) {
|
|
203
|
+ $countData = BatchMarkTagRecord::recordCount($taskId);
|
|
204
|
+ $total = 0; $exec = 0;
|
|
205
|
+ if($countData->isNotEmpty()) {
|
|
206
|
+ foreach ($countData as $countInfo) {
|
|
207
|
+ if(0 == $countInfo->status) {
|
|
208
|
+ $exec += $countInfo->count;
|
|
209
|
+ }
|
|
210
|
+
|
|
211
|
+ $total += $countInfo->count;
|
|
212
|
+ }
|
|
213
|
+ }
|
|
214
|
+
|
|
215
|
+ if($exec == 0) {
|
|
216
|
+ BatchMarkTag::updateStatus($taskId, 3);
|
169
|
217
|
}
|
170
|
218
|
}
|
171
|
219
|
}
|