2 changed files with 140 additions and 0 deletions
@ -0,0 +1,139 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\common\task; |
||||
|
|
||||
|
use app\enterprise\model\Friend; |
||||
|
use app\enterprise\model\GroupUser; |
||||
|
use app\enterprise\model\Message; |
||||
|
use app\manage\model\Config; |
||||
|
use yunwuxin\cron\Task; |
||||
|
|
||||
|
class UserClearMessage extends Task |
||||
|
{ |
||||
|
|
||||
|
// 定时任务日志内容 |
||||
|
protected $content = ''; |
||||
|
protected $path = ''; |
||||
|
protected $daytime = 60;//86400; |
||||
|
|
||||
|
/** |
||||
|
* 自动写入定时任务日志 |
||||
|
* @return \think\response\Json |
||||
|
*/ |
||||
|
protected function writeLog($text) |
||||
|
{ |
||||
|
$this->path = root_path() . 'crontab.txt'; |
||||
|
|
||||
|
$content = '重置中!'; |
||||
|
if (!file_exists($this->path)) { |
||||
|
fopen($this->path, 'w'); |
||||
|
} |
||||
|
if (date('d') != 10) { |
||||
|
$content = file_get_contents($this->path); |
||||
|
} |
||||
|
file_put_contents($this->path, $content . date('Y-m-d H:i:s') . ':' . $text . PHP_EOL); |
||||
|
} |
||||
|
|
||||
|
public function configure() |
||||
|
{ |
||||
|
//设置每天2点执行 |
||||
|
// $this->dailyAt('02:00'); |
||||
|
$this->everyFiveMinutes(); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 执行任务 |
||||
|
* @return mixed |
||||
|
*/ |
||||
|
protected function execute() |
||||
|
{ |
||||
|
if(date('H:i')!='02:00'){ |
||||
|
return false; |
||||
|
} |
||||
|
try { |
||||
|
$config=Config::getSystemInfo(); |
||||
|
$status=$config['chatInfo']['userMsgClear'] ?? false; |
||||
|
if($status){ |
||||
|
// 个人记录删除 |
||||
|
$whereFriend = [ |
||||
|
['is_blacklist','=' , 0], |
||||
|
['status','=' , 1], |
||||
|
['delete_time','=' , 0], |
||||
|
['clear_msg_day','>' , 0] |
||||
|
]; |
||||
|
$friend = Friend::where($whereFriend)->field('create_user,friend_user_id,clear_msg_day')->select(); |
||||
|
foreach ($friend as $item) { |
||||
|
$days = $item['clear_msg_day']; |
||||
|
$to_user = $item['friend_user_id']; |
||||
|
$form_user = $item['create_user']; |
||||
|
$time = time() - ($days * $this->daytime); |
||||
|
$chat_identify = chat_identify($form_user, $to_user); |
||||
|
|
||||
|
$whereMsg = [ |
||||
|
['create_time', '<', $time], |
||||
|
['from_user', '=', $form_user], |
||||
|
['to_user', '=', $to_user], |
||||
|
['chat_identify', '=', $chat_identify] |
||||
|
]; |
||||
|
$msgRes = Message::where($whereMsg)->select(); |
||||
|
foreach ($msgRes as $msg) { |
||||
|
if ($msg['del_user']) { |
||||
|
$msg->delete_time = time(); |
||||
|
} else { |
||||
|
$msg->del_user = $form_user; |
||||
|
} |
||||
|
$msg->save(); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// 群聊个人记录删除 |
||||
|
$whereGroupUser = [ |
||||
|
['status','=' , 1], |
||||
|
['delete_time','=' , 0], |
||||
|
['clear_msg_day','>' , 0] |
||||
|
]; |
||||
|
|
||||
|
$groupUser = GroupUser::where($whereGroupUser)->field('user_id,group_id,clear_msg_day')->select(); |
||||
|
foreach ($groupUser as $item) { |
||||
|
$days = $item['clear_msg_day']; |
||||
|
$group_id = $item['group_id']; |
||||
|
$form_user = $item['user_id']; |
||||
|
$time = time() - ($days * $this->daytime); |
||||
|
|
||||
|
$chat_identify = "group-{$group_id}"; |
||||
|
// 查询群成员总数 |
||||
|
$countWhere = [ |
||||
|
['status','=' , 1], |
||||
|
['delete_time','=' , 0], |
||||
|
['group_id','=' , 0] |
||||
|
]; |
||||
|
$group_user_count = GroupUser::where($countWhere)->count(); |
||||
|
|
||||
|
$whereMsg = [ |
||||
|
['create_time', '<', $time], |
||||
|
['from_user', '=', $form_user], |
||||
|
['to_user', '=', $group_id], |
||||
|
['chat_identify', '=', $chat_identify] |
||||
|
]; |
||||
|
$msgRes = Message::where($whereMsg)->select(); |
||||
|
foreach ($msgRes as $msg) { |
||||
|
if ($msg['del_user']) { |
||||
|
$msg->del_user .= ',' . $form_user; |
||||
|
} else { |
||||
|
$msg->del_user = $form_user; |
||||
|
} |
||||
|
// 如果群的删除用户数量等于群员数量则删除这条信息 |
||||
|
$del_user_count = count(explode(',',$msg->del_user)); |
||||
|
if ($del_user_count == $group_user_count) { |
||||
|
$msg->delete_time = time(); |
||||
|
} |
||||
|
$msg->save(); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
print "****************消息清理成功******************\n"; |
||||
|
} catch (Exception $e) { |
||||
|
print '消息清理失败:'.$e->getMessage()."\n"; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue