|
|
<?php
|
|
|
|
|
|
use Model\listsSql;
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 处理预热邮箱
|
|
|
* @author:dc
|
|
|
* @time 2024/9/4 11:02
|
|
|
* Class HotMail
|
|
|
*/
|
|
|
class HotMail {
|
|
|
|
|
|
public function __construct(){
|
|
|
$this->db = db();
|
|
|
$this->start();
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* shopk那边的预热邮箱
|
|
|
* @var array
|
|
|
*/
|
|
|
private $hotEmail = [];
|
|
|
|
|
|
/**
|
|
|
* @var \Lib\Db|\Lib\DbPool
|
|
|
*/
|
|
|
private $db;
|
|
|
|
|
|
|
|
|
/**
|
|
|
* @author:dc
|
|
|
* @time 2024/7/18 14:04
|
|
|
*/
|
|
|
private function start(){
|
|
|
_echo('启动预热邮件处理 ');
|
|
|
|
|
|
if(redis()->add('hot_mail_sync2',1,60)){
|
|
|
_echo( '正在计算数据');
|
|
|
$maxId = $this->db->value("select `id` from `lists` order by `id` desc limit 1");
|
|
|
foreach (minMaxToArray($maxId-50000,$maxId) as $ids){
|
|
|
redis()->rPush('hot_check_ids',implode(',',$ids));
|
|
|
}
|
|
|
_echo( '计算完成');
|
|
|
redis()->delete('hot_mail_sync2');
|
|
|
}
|
|
|
|
|
|
|
|
|
while (1){
|
|
|
$ids = redis()->lPop('hot_check_ids');
|
|
|
if($ids){
|
|
|
$ids = explode(',',$ids);
|
|
|
$this->run($ids);
|
|
|
}else{
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
private $folder = [];
|
|
|
|
|
|
private function run($id){
|
|
|
$list = $this->db->all(\Model\listsSql::all(dbWhere(['id'=>$id,'is_hots'=>0]),'`id`,`from`,`to`,`folder_id`,`is_hots`'));
|
|
|
foreach ($list as $item){
|
|
|
if(empty($this->folder[$item['folder_id']])){
|
|
|
$this->folder[$item['folder_id']] = folderAlias($this->db->value(\Model\folderSql::first($item['folder_id'],'folder')));
|
|
|
}
|
|
|
|
|
|
if(!in_array($this->folder[$item['folder_id']],['收件箱','发件箱'])){
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
// 是否是发件箱
|
|
|
if($this->folder[$item['folder_id']] == '发件箱'){
|
|
|
$w = ['email' => array_map('strtolower',explode(',',$item['to']))];
|
|
|
}else{
|
|
|
$w = ['email' =>strtolower($item['from'])];
|
|
|
}
|
|
|
// 是否在 预热邮箱中
|
|
|
$mkey = md5(dbWhere($w));
|
|
|
if(!isset($this->hotEmail[$mkey])){
|
|
|
$this->hotEmail[$mkey] = $this->db->count('select count(*) from `hot_mail` where '.dbWhere($w));
|
|
|
}
|
|
|
|
|
|
if($this->hotEmail[$mkey]){
|
|
|
if(!$item['is_hots']){
|
|
|
$ret = $this->db->update(listsSql::$table,['is_hots'=>1],dbWhere(['id'=>$item['id']]));
|
|
|
echo date('d H:i:s').' +==》 '.$item['id'].':'.$ret."\n";
|
|
|
}
|
|
|
|
|
|
}else{
|
|
|
// if($item['is_hots']){
|
|
|
// $ret = $this->db->update(listsSql::$table,['is_hots'=>0],dbWhere(['id'=>$item['id']]));
|
|
|
// echo date('d H:i:s').' -==》 '.$item['id'].':'.$ret."\n";
|
|
|
// }
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// $list = $this->db->all(\Model\listsSql::all(dbWhere(['id'=>$id,'is_hots'=>1]),'`id`'));
|
|
|
// foreach ($list as $item){
|
|
|
// redis()->rPush('sync_to_es',$item['id']);
|
|
|
// }
|
|
|
}
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
\Co\run(function () {
|
|
|
include_once "../vendor/autoload.php";
|
|
|
|
|
|
new HotMail();
|
|
|
});
|
|
|
|
|
|
//
|
|
|
//swoole_set_process_name('hot-email-run-man');
|
|
|
//
|
|
|
//$pm = new Swoole\Process\Manager();
|
|
|
//
|
|
|
//$pm->addBatch(3,function (){
|
|
|
//
|
|
|
// swoole_set_process_name('hot-email-run');
|
|
|
//
|
|
|
// include_once "../vendor/autoload.php";
|
|
|
//
|
|
|
// new HotMail();
|
|
|
//
|
|
|
// exit();
|
|
|
//},true);
|
|
|
//
|
|
|
//$pm->start();
|
|
|
|
|
|
|