| 
...
 | 
...
 | 
@@ -4,57 +4,101 @@ | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
 require_once "../vendor/autoload.php";
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
 function getEsData($data){
 | 
| 
 | 
 | 
     if(!empty($data['id'])){
 | 
| 
 | 
 | 
         $data['uuid'] = $data['id'];
 | 
| 
 | 
 | 
         unset($data['id']);
 | 
| 
 | 
 | 
     }
 | 
| 
 | 
 | 
     if(!empty($data['from'])){
 | 
| 
 | 
 | 
         $data['from'] = [
 | 
| 
 | 
 | 
             'email' =>  $data['from'],
 | 
| 
 | 
 | 
             'name'  =>  $data['from_name']??''
 | 
| 
 | 
 | 
         ];
 | 
| 
 | 
 | 
         unset($data['from_name']);
 | 
| 
 | 
 | 
     }
 | 
| 
 | 
 | 
     unset($data['date']);
 | 
| 
 | 
 | 
     if(!empty($data['created_at'])){
 | 
| 
 | 
 | 
         $data['created_at'] = date('Y-m-d\TH:i:s',strtotime($data['created_at']));
 | 
| 
 | 
 | 
     }
 | 
| 
 | 
 | 
     if(!empty($data['updated_at'])){
 | 
| 
 | 
 | 
         $data['updated_at'] = date('Y-m-d\TH:i:s',strtotime($data['updated_at']));
 | 
| 
 | 
 | 
     }
 | 
| 
 | 
 | 
     $data['references'] = empty($data['references']) ? '' : $data['references'];
 | 
| 
 | 
 | 
     return $data;
 | 
| 
 | 
 | 
 }
 | 
| 
 | 
 | 
 /**
 | 
| 
 | 
 | 
  * 把mysql的数据同步到es
 | 
| 
 | 
 | 
  * @author:dc
 | 
| 
 | 
 | 
  * @time 2025/3/4 10:19
 | 
| 
 | 
 | 
  * Class SyncToEsCmd
 | 
| 
 | 
 | 
  */
 | 
| 
 | 
 | 
 class SyncToEsCmd {
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
     public $isStop = false;
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
     public function handler(){
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
         $handler = function ($signal){
 | 
| 
 | 
 | 
             _echo('收到进程信号 '. $signal);
 | 
| 
 | 
 | 
             // 可以处理其他程序
 | 
| 
 | 
 | 
             $this->isStop = true;
 | 
| 
 | 
 | 
         };
 | 
| 
 | 
 | 
         pcntl_signal(SIGTERM, $handler); // 这个是kill
 | 
| 
 | 
 | 
         pcntl_signal(SIGINT, $handler); // 这个是 ctrl+c
 | 
| 
 | 
 | 
 //        pcntl_signal(SIGHUP, $handler);
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
         $es = (new Lib\Es\Es('hg_ai_emails'));
 | 
| 
 | 
 | 
         $db = db();
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
         while (1){
 | 
| 
 | 
 | 
             // 检查是否接收到信号
 | 
| 
 | 
 | 
             pcntl_signal_dispatch();
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
             if($this->isStop) {
 | 
| 
 | 
 | 
                 _echo('已退出进程');
 | 
| 
 | 
 | 
                 break;
 | 
| 
 | 
 | 
             }
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
             $id = redis()->lPop('sync_to_es');
 | 
| 
 | 
 | 
             if($id){
 | 
| 
 | 
 | 
                 $data = $db->first(\Model\listsSql::first('`id` = '.$id));
 | 
| 
 | 
 | 
                 if($data){
 | 
| 
 | 
 | 
                     // 设置 进程 是否在运行
 | 
| 
 | 
 | 
                     redis()->set('sync_my_pid:'.getmypid(),time(),86400);
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
 $db = db();
 | 
| 
 | 
 | 
 $es = (new Lib\Es\Es(''));
 | 
| 
 | 
 | 
 while (1){
 | 
| 
 | 
 | 
     $id = redis()->lPop('sync_to_es');
 | 
| 
 | 
 | 
     if($id){
 | 
| 
 | 
 | 
         $data = $db->first(\Model\listsSql::first('`id` = '.$id));
 | 
| 
 | 
 | 
         if($data){
 | 
| 
 | 
 | 
                     $data['is_auto']=$db->count('select count(*) from `lists_auto` where `list_id` = '.$data['id']) ? 1 : 0;
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
             $data['is_auto']=$db->count('select count(*) from `lists_auto` where `list_id` = '.$data['id']) ? 1 : 0;
 | 
| 
 | 
 | 
                     $data = $this->getEsData($data);
 | 
| 
 | 
 | 
                     $doc_id = $data['email_id'].'_'.$data['folder_id'].'_'.$data['uid'];
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
             $data = getEsData($data);
 | 
| 
 | 
 | 
             $doc_id = $data['email_id'].'_'.$data['folder_id'].'_'.$data['uid'];
 | 
| 
 | 
 | 
                     $code = $es->save($doc_id,$data);
 | 
| 
 | 
 | 
                     if($code!==200){
 | 
| 
 | 
 | 
                         sleep(1);
 | 
| 
 | 
 | 
                         $code = $es->save($doc_id,$data); // 重试一次
 | 
| 
 | 
 | 
                     }
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
             $code = $es->save($doc_id,$data);
 | 
| 
 | 
 | 
             if($code!==200){
 | 
| 
 | 
 | 
                 sleep(1);
 | 
| 
 | 
 | 
                 $code = $es->save($doc_id,$data); // 重试一次
 | 
| 
 | 
 | 
                     _echo('同步es: '.$doc_id.'===>'.$code);
 | 
| 
 | 
 | 
                     continue;
 | 
| 
 | 
 | 
                 }
 | 
| 
 | 
 | 
             }
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
             _echo('同步es: '.$doc_id.'===>'.$code);
 | 
| 
 | 
 | 
             continue;
 | 
| 
 | 
 | 
             echo '没有找到数据'.PHP_EOL;
 | 
| 
 | 
 | 
             sleep(1);
 | 
| 
 | 
 | 
         }
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
     }
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
     echo '没有找到数据'.PHP_EOL;
 | 
| 
 | 
 | 
     sleep(1);
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
     public function getEsData($data){
 | 
| 
 | 
 | 
         if(!empty($data['id'])){
 | 
| 
 | 
 | 
             $data['uuid'] = $data['id'];
 | 
| 
 | 
 | 
             unset($data['id']);
 | 
| 
 | 
 | 
         }
 | 
| 
 | 
 | 
         if(!empty($data['from'])){
 | 
| 
 | 
 | 
             $data['from'] = [
 | 
| 
 | 
 | 
                 'email' =>  $data['from'],
 | 
| 
 | 
 | 
                 'name'  =>  $data['from_name']??''
 | 
| 
 | 
 | 
             ];
 | 
| 
 | 
 | 
             unset($data['from_name']);
 | 
| 
 | 
 | 
         }
 | 
| 
 | 
 | 
         unset($data['date']);
 | 
| 
 | 
 | 
         if(!empty($data['created_at'])){
 | 
| 
 | 
 | 
             $data['created_at'] = date('Y-m-d\TH:i:s',strtotime($data['created_at']));
 | 
| 
 | 
 | 
         }
 | 
| 
 | 
 | 
         if(!empty($data['updated_at'])){
 | 
| 
 | 
 | 
             $data['updated_at'] = date('Y-m-d\TH:i:s',strtotime($data['updated_at']));
 | 
| 
 | 
 | 
         }
 | 
| 
 | 
 | 
         $data['references'] = empty($data['references']) ? '' : $data['references'];
 | 
| 
 | 
 | 
         return $data;
 | 
| 
 | 
 | 
     }
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
 }
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
 (new SyncToEsCmd())->handler();
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
 return 1;
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
 
 | 
...
 | 
...
 | 
 |