feat: spu

This commit is contained in:
2025-01-06 18:02:57 +08:00
parent 0895955973
commit fd18cffeab
12 changed files with 505 additions and 6 deletions

View File

@@ -10,9 +10,16 @@ declare(strict_types=1);
namespace App\Cron\Good;
use App\Cache\Redis\Common\CommonRedisKey;
use App\Cache\Redis\Common\CycleCache;
use App\Cache\Redis\RedisCache;
use App\Extend\DateUtil;
use App\Lib\Log;
use App\Model\Cycle;
use Hyperf\Crontab\Annotation\Crontab;
use Hyperf\Di\Annotation\Inject;
use Psr\Container\ContainerExceptionInterface;
use Psr\Container\NotFoundExceptionInterface;
#[Crontab(rule: "0 5 * * *", name: "CycleCreateTask", singleton: true , callback: "execute", memo: "创建新的周期任务")]
class CycleCreateTask
@@ -23,11 +30,72 @@ class CycleCreateTask
#[Inject]
protected Cycle $cycleModel;
public function execute()
{
//todo Write logic
var_dump(date('Y-m-d H:i:s', time()));
/**
* @var CycleCache $cycleCache
*/
#[Inject]
protected CycleCache $cycleCache;
$maxDate = $this->cycleModel->max('date');
/**
* @var RedisCache
*/
#[Inject]
protected RedisCache $redis;
/**
* @var Log
*/
#[Inject]
protected Log $log;
/**
* 非常重要的逻辑--生成周期 (不可删除)
* @return void
* @throws ContainerExceptionInterface
* @throws NotFoundExceptionInterface
*/
public function execute(): void
{
$maxDate = $this->cycleModel->max('dates') ?? 0;
$nextMax = date('Ymd',strtotime('+3 day',time()));
if ($maxDate != 0 && $nextMax <= $maxDate) {
return;
}
$nextCycleRange = DateUtil::getDateFromRange(date('Ymd'),$nextMax);
$this->cycleCache->setAllCycleCache();
$key = CommonRedisKey::getCycleList();
$noDataInsertArr = [];
$noDataArr = [];
foreach ($nextCycleRange as $date) {
$one = $this->redis->zScore($key,$date,'system');
if ($one) continue;
$noDataInsertArr[] = [
'dates' => $date,
'create_time' => date('Y-m-d H:i:s'),
];
$noDataArr[] = $date;
}
$insertSql = (new Cycle)->insert($noDataInsertArr);
if (!$insertSql) $this->log->error('添加周期失败!!!');
$res = $this->cycleModel->whereIn('dates',$noDataArr)->get();
if (empty($res)) return;
$res = $res->toArray();
foreach ($res as $one) {
$this->redis->zAdd($key,$one['id'],$one['dates'],'system');
}
$this->log->notice('添加周期成功,添加的周期为'.json_encode($noDataArr,JSON_UNESCAPED_UNICODE));
}
}