Merge branch 'feature/mzl_dev'
# Conflicts: # app/command/TbCommand.php # app/common/utils/email/Emails.php # app/controller/IndexController.php # app/functions.php
This commit is contained in:
@@ -2,7 +2,15 @@
|
||||
|
||||
namespace app\common\utils\email;
|
||||
|
||||
use app\common\model\Country;
|
||||
use app\common\model\CrmCustomer;
|
||||
use support\Db;
|
||||
use support\Log;
|
||||
use support\exception\BusinessException;
|
||||
use app\common\model\EmailParsedResult;
|
||||
use app\common\model\InquiryChannel;
|
||||
use app\common\model\InquiryLog;
|
||||
use app\common\model\User;
|
||||
|
||||
class Emails
|
||||
{
|
||||
@@ -407,4 +415,146 @@ class Emails
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public function fenpai()
|
||||
{
|
||||
try {
|
||||
// $uids = [
|
||||
// 64, 63, 83, 93, 108, 118, 131, 132, 145, 150, 143, 156, 157, 158
|
||||
// ];
|
||||
|
||||
|
||||
// 配置参数
|
||||
$batchSize = 100; // 每批处理量
|
||||
$delaySeconds = 1; // 每封邮件间隔秒数
|
||||
$throttleAfter = 50; // 每发送多少封后增加休息
|
||||
$throttleSeconds = 5; // 批量休息秒数
|
||||
|
||||
// 固定录单人
|
||||
$enterUserId = 75;
|
||||
$enterUser = User::where('id', $enterUserId)->first();
|
||||
|
||||
// 固定渠道
|
||||
$channel = 8;
|
||||
$channelInfo = InquiryChannel::where('id', $channel)->first();
|
||||
|
||||
// 初始化 UID 轮询器
|
||||
\app\common\utils\UidRotator::initialize([64, 63, 83, 93, 108, 118, 131, 132, 145, 150, 143, 156, 157, 158]);
|
||||
|
||||
EmailParsedResult::where('status', 0)
|
||||
->chunkById($batchSize, function ($records) use ($delaySeconds, $throttleAfter, $throttleSeconds, $enterUser, $channelInfo) {
|
||||
$count = 0;
|
||||
|
||||
foreach ($records as $record) {
|
||||
try {
|
||||
// Mail::to($record->mailto)->send(new CustomEmail($record));
|
||||
|
||||
// 获取国家信息
|
||||
$countryName = removeParentheses($record->iplocation);
|
||||
$countryInfo = Country::where('cn_addr', $countryName)->first();
|
||||
// var_dump($countryName);
|
||||
// var_dump($countryInfo);
|
||||
// var_dump('====== ====== ====== ====== ====== ====== ');
|
||||
// 获取下一个分配的UID
|
||||
$assignedUid = \app\common\utils\UidRotator::next();
|
||||
// var_dump($assignedUid);
|
||||
// var_dump('====== ====== ====== ====== ====== ====== ');
|
||||
// 获取分配的用户信息
|
||||
$recipientInfo = User::where('id', $assignedUid)->first();
|
||||
// var_dump($recipientInfo);
|
||||
// var_dump('====== ====== ====== ====== ====== ====== ');
|
||||
// 生成录单
|
||||
$log = [
|
||||
'order_no' => orderNum(),
|
||||
'enter_user_id' => $enterUser->id,
|
||||
'recipient' => $assignedUid,
|
||||
'quality' => 2,
|
||||
'channel' => $channelInfo->id,
|
||||
'email' => $record->email,
|
||||
'tel' => $record->tel,
|
||||
'whatsapp' => '',
|
||||
'country' => $countryInfo->id,
|
||||
'contacts' => $record->name,
|
||||
'content' => $record->message,
|
||||
'r_time' => time(),
|
||||
't_time' => time(),
|
||||
'status' => 2,
|
||||
'sync_crm' => 1
|
||||
];
|
||||
// var_dump($log);
|
||||
// var_dump('====== ====== ====== ====== ====== ====== ');
|
||||
$inquiryLogResult = InquiryLog::create($log);
|
||||
if (!$inquiryLogResult) {
|
||||
throw new BusinessException('录单失败~');
|
||||
}
|
||||
|
||||
// 同步客户
|
||||
$crmCustomer = new CrmCustomer();
|
||||
$crmCustomer->sn = $inquiryLogResult->order_no;
|
||||
$crmCustomer->corp_abbr = $recipientInfo->corp_id;
|
||||
$crmCustomer->user_id = $assignedUid;
|
||||
$crmCustomer->type = 1;
|
||||
$crmCustomer->channel_id = $inquiryLogResult->channel;
|
||||
$crmCustomer->country_id = $inquiryLogResult->country;
|
||||
$crmCustomer->magnitude = $inquiryLogResult->quality;
|
||||
$crmCustomer->email = $inquiryLogResult->email;
|
||||
$crmCustomer->phone = $inquiryLogResult->tel;
|
||||
$crmCustomer->WhatsApp = $inquiryLogResult->whatsapp;
|
||||
$crmCustomer->contacts = $inquiryLogResult->contacts;
|
||||
$crmCustomer->desc_collect = $inquiryLogResult->content;
|
||||
$crmCustomer->enter_user_id = $inquiryLogResult->enter_user_id;
|
||||
// var_dump($crmCustomer);
|
||||
// var_dump('====== ====== ====== ====== ====== ====== ');
|
||||
if (!$crmCustomer->save()) {
|
||||
throw new BusinessException('同步失败~');
|
||||
}
|
||||
|
||||
// 邮件模板
|
||||
$data = [
|
||||
'order_no' => $inquiryLogResult->order_no,
|
||||
'enter_user_id' => $enterUser->name,
|
||||
'recipient' => $recipientInfo->name,
|
||||
'quality' => (new \app\inquiry\service\InquiryLogService())->qualityName($inquiryLogResult->quality),
|
||||
'channel' => $channelInfo->name,
|
||||
'email' => $inquiryLogResult->email && $inquiryLogResult->email != '' ? $inquiryLogResult->email : ' - ',
|
||||
'tel' => $inquiryLogResult->tel && $inquiryLogResult->tel != '' ? $inquiryLogResult->tel : ' - ',
|
||||
'whatsapp' => $inquiryLogResult->whatsapp && $inquiryLogResult->whatsapp != '' ? $inquiryLogResult->whatsapp : ' - ',
|
||||
'country' => $countryName,
|
||||
'contacts' => $inquiryLogResult->contacts && $inquiryLogResult->contacts != '' ? $inquiryLogResult->contacts : ' - ',
|
||||
'content' => $inquiryLogResult->content && $inquiryLogResult->content != '' ? $inquiryLogResult->content : ' - ',
|
||||
'r_time' => $inquiryLogResult->r_time ? date('Y-m-d H:i:s', $inquiryLogResult->r_time) : ' - ',
|
||||
't_time' => $inquiryLogResult->t_time ? date('Y-m-d H:i:s', $inquiryLogResult->t_time) : ' - '
|
||||
];
|
||||
\app\common\utils\email\MailSend::send($recipientInfo->email, '【XYH】新的客户线索', replaceTpl($data));
|
||||
// var_dump($data);
|
||||
// var_dump('====== ====== ====== ====== ====== ====== ');
|
||||
// 更新状态
|
||||
$record->update(['status' => 1]);
|
||||
|
||||
// 每封邮件后延迟
|
||||
if ($delaySeconds > 0) {
|
||||
sleep($delaySeconds);
|
||||
}
|
||||
|
||||
// 每发送一定数量后额外休息
|
||||
if (++$count % $throttleAfter === 0) {
|
||||
sleep($throttleSeconds);
|
||||
Log::info("已发送 {$count} 封邮件,休息 {$throttleSeconds} 秒");
|
||||
}
|
||||
|
||||
} catch (\Exception $e) {
|
||||
Log::error("邮件发送失败 ID:{$record->id} - " . $e->getMessage());
|
||||
// 更新状态
|
||||
$record->update(['status' => 3]);
|
||||
// 失败后也加入延迟,避免快速连续失败
|
||||
sleep($delaySeconds);
|
||||
}
|
||||
}
|
||||
});
|
||||
} catch (\Throwable $th) {
|
||||
flg(dpr($th));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user