Files
hyperf_service/app/Cron/Oss/OssDelByOssIdTask.php
2024-11-21 11:31:20 +08:00

98 lines
2.7 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
/**
* This crontab file is part of item.
*
* @author ctexthuang
* @contact ctexthuang@qq.com
*/
declare(strict_types=1);
namespace App\Cron\Oss;
use App\Cache\Redis\Common\CommonRedisKey;
use App\Cache\Redis\RedisCache;
use App\Lib\Log;
use App\Model\OssObject;
use Hyperf\Crontab\Annotation\Crontab;
use Hyperf\Di\Annotation\Inject;
use Psr\Container\ContainerExceptionInterface;
use Psr\Container\NotFoundExceptionInterface;
#[Crontab(rule: "* * * * *", name: "OssDelByOssIdTask", singleton: true , callback: "execute", memo: "根据id删除oss的逻辑")]
class OssDelByOssIdTask
{
/**
* 日志
* @var Log $log
*/
#[Inject]
protected Log $log;
/**
* 缓存
* @var RedisCache $redis
*/
#[Inject]
protected RedisCache $redis;
/**
* @return void
* @throws ContainerExceptionInterface
* @throws NotFoundExceptionInterface
*/
public function execute(): void
{
try {
$key = CommonRedisKey::getDeleteOssImgListByOssId();
$ossIds = [];
for ($i = 1; $i < 50; $i++) {
$one = $this->redis->rPop($key,'system');
if (empty($one)){
continue;
}
$ossIds[] = $one;
}
if (count($ossIds) == 0) {
// $this->log->notice(__CLASS__.':success:无根据id删除的列表');
return;
}
$ossObjectModel = new OssObject();
//获取url列表用于删除oss
$urlList = $ossObjectModel->whereIn('id', $ossIds)->pluck('url');
if (empty($urlList)){
$this->log->error(__CLASS__.':删除内容关联失败,无法获取url');
return;
}
if(count($urlList->toArray()) != count($ossIds))
{
$this->log->error(__CLASS__.':删除内容关联失败url数量与id数量不一致');
return;
}
// 删除oss图片
$res = $ossObjectModel->whereIn('id', $ossIds)->delete();
if (!$res) {
$this->log->error(__CLASS__.':删除内容关联失败,删除sql执行失败');
return;
}
//删除oss资源
//把图片地址丢到删除redis队列
foreach ($urlList as $item) {
$this->redis->lPush(CommonRedisKey::getDeleteOssImgListByUrl(), $item,'system');
}
$this->log->notice(__CLASS__.':success:删除oss文件个数:' . count($ossIds));
}catch (\Exception $e){
$this->log->error(__CLASS__.':'.$e->getMessage());
return;
}
}
}