正在显示
1 个修改的文件
包含
29 行增加
和
19 行删除
| @@ -275,6 +275,32 @@ class SyncMail { | @@ -275,6 +275,32 @@ class SyncMail { | ||
| 275 | ],'`id`')); | 275 | ],'`id`')); | 
| 276 | } | 276 | } | 
| 277 | 277 | ||
| 278 | + /** | ||
| 279 | + * 过滤uid | ||
| 280 | + * @param array $uids | ||
| 281 | + * @return array | ||
| 282 | + * @author:dc | ||
| 283 | + * @time 2024/11/12 14:17 | ||
| 284 | + */ | ||
| 285 | + private function getFilterUid(array $uids, int $folder_id):array { | ||
| 286 | + foreach ($uids as $k=>$uid){ | ||
| 287 | + | ||
| 288 | + $num = redis()->get('h_'.$folder_id.'_'.$uid,function () use ($folder_id,$uid){ | ||
| 289 | + $num = $this->db->value(listsSql::first(dbWhere(['email_id'=>$this->emailId(),'folder_id'=>$folder_id,'uid'=>$uid]),'count(*) as c')); | ||
| 290 | + if($num){ | ||
| 291 | + redis()->set('h_'.$folder_id.'_'.$uid,1,86400); | ||
| 292 | + } | ||
| 293 | + return $num; | ||
| 294 | + }); | ||
| 295 | + | ||
| 296 | + if($num){ | ||
| 297 | + unset($uids[$k]); | ||
| 298 | + } | ||
| 299 | + } | ||
| 300 | + | ||
| 301 | + return array_values($uids); | ||
| 302 | + } | ||
| 303 | + | ||
| 278 | /**同步邮件 | 304 | /**同步邮件 | 
| 279 | * | 305 | * | 
| 280 | * @param string|\Lib\Imap\Request\Folder $folder | 306 | * @param string|\Lib\Imap\Request\Folder $folder | 
| @@ -308,26 +334,10 @@ class SyncMail { | @@ -308,26 +334,10 @@ class SyncMail { | ||
| 308 | $uids = $msg->forPage($p)->getOriginUids(); | 334 | $uids = $msg->forPage($p)->getOriginUids(); | 
| 309 | } | 335 | } | 
| 310 | 336 | ||
| 337 | + $uids = $this->getFilterUid($uids,$folder_id); | ||
| 338 | + | ||
| 311 | if($uids){ | 339 | if($uids){ | 
| 312 | $p++; | 340 | $p++; | 
| 313 | - | ||
| 314 | - foreach ($uids as $k=>$uid){ | ||
| 315 | - | ||
| 316 | - $num = redis()->get('h_'.$folder_id.'_'.$uid,function () use ($folder_id,$uid){ | ||
| 317 | - $num = $this->db->value(listsSql::first(dbWhere(['email_id'=>$this->emailId(),'folder_id'=>$folder_id,'uid'=>$uid]),'count(*) as c')); | ||
| 318 | - if($num){ | ||
| 319 | - redis()->set('h_'.$folder_id.'_'.$uid,1,86400); | ||
| 320 | - } | ||
| 321 | - return $num; | ||
| 322 | - }); | ||
| 323 | - | ||
| 324 | - if($num){ | ||
| 325 | - unset($uids[$k]); | ||
| 326 | - } | ||
| 327 | - } | ||
| 328 | - | ||
| 329 | - if(!$uids) continue; | ||
| 330 | - | ||
| 331 | $lists = $msg->uid($uids)->get()->all(); | 341 | $lists = $msg->uid($uids)->get()->all(); | 
| 332 | $sync_number += count($lists); | 342 | $sync_number += count($lists); | 
| 333 | // 没有数据就跳出 | 343 | // 没有数据就跳出 | 
| @@ -337,7 +347,7 @@ class SyncMail { | @@ -337,7 +347,7 @@ class SyncMail { | ||
| 337 | }else{ | 347 | }else{ | 
| 338 | break; | 348 | break; | 
| 339 | } | 349 | } | 
| 340 | - | 350 | + // 只需要执行一次 | 
| 341 | if ($this->search instanceof ImapSearch){ | 351 | if ($this->search instanceof ImapSearch){ | 
| 342 | break; | 352 | break; | 
| 343 | } | 353 | } | 
- 
请 注册 或 登录 后发表评论