承接 lliure/reattempts 相关项目开发

从需求分析到上线部署,全程专人跟进,保证项目质量与交付效率

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

lliure/reattempts

Composer 安装命令:

composer require lliure/reattempts

包简介

Esse pacote tem como objetivo gerar querys/consultas automaticamente para o teste de retentavivas ao decorrer de um periodo estipulado.

README 文档

README

Classe utilitária para gerenciar lógicas de retry (tentativas de reprocessamento) com definição de tentativas sequenciais e intervalos programados.

Começando

// 1) Instanciação e configuração
$reattempt = new Reattempts(
    attemptsDefault: 5,
    columnAttempts: 'attempts',
    columnDateNextAttempt: 'nextTry'
);

// 2) Definição de intervalos para tentativas extras
$reattempt
    ->addInterval('PT5H')
    ->addInterval('PT12H')
    ->addInterval('P1D', 2);

// 3) Geração da cláusula WHERE e busca dos registros elegíveis
$where = $reattempt->generateWhereQuery();
$rows  = \dibi::getConnection()
    ->select('*')
    ->from('sua_tabela')
    ->where($where)
    ->fetchAll();

// 4) Processamento e atualização de cada registro
foreach ($rows as $row) {
    $result = $reattempt->update($row);

    if (is_int($result)) {
        // Objeto-model: retorno é número de linhas afetadas
        echo "Registro ID {$row->id} atualizado ({$result} linhas).\n";
    } else {
        // Array: retorno é array de dados para update manual
        \dibi::getConnection()
            ->update('sua_tabela', $result)
            ->where('id = %i', $row['id'])
            ->execute();
    }
}

Este exemplo demonstra todo o ciclo de retry: do cálculo da cláusula WHERE até a aplicação das atualizações, seja via o método interno update() ou manualmente com Dibi.

Nota: Para extrair apenas a cláusula WHERE, use generateWhereQuery(). Para obter os dados de atualização sem persistir, veja computeNextAttemptData(). Para aplicar atualização imediata, use update().

Resumo da classe

class Reattempts
{
    public function __construct(
        int    $attemptsDefault = 4,
        string $columnAttempts = 'attempts',
        string $columnDateNextAttempt = 'nextAttempt'
    );

    public function setAttemptsDefault(int $attemptsDefault): self;
    public function addInterval(string $isoInterval, int $repeat = 1): self;
    public function nextInterval(string $isoInterval, int $repeat = 1): self;
    public function generateWhereQuery(): string;
    public function computeNextAttemptData(array $row): array;
    public function update(mixed $row, string $updateMethod = 'update'): int|array;
    public function __toString(): string;
}

Métodos

__construct(int $attemptsDefault = 4, string $columnAttempts = 'attempts', string $columnDateNextAttempt = 'nextAttempt')

Define o número de tentativas sequenciais e os nomes das colunas de controle.

setAttemptsDefault(int $attemptsDefault): self

Atualiza o máximo de tentativas sequenciais e reinicia o contador interno para começar a partir desse valor.

addInterval(string $isoInterval, int $repeat = 1): self

Adiciona um ou mais DateInterval extras (ISO‑8601) ao fluxo de retry para tentativas além das sequenciais. Exemplo: 'PT5H', 'P1D'.

nextInterval(string $isoInterval, int $repeat = 1): self

Sinônimo de addInterval(), permite encadear múltiplos intervalos de forma fluida.

generateWhereQuery(): string

Gera a cláusula WHERE para filtrar registros prontos para retry:

  • `attempts` < (attemptsDefault + soma de tentativas extras)
  • `nextTry` <= NOW()

computeNextAttemptData(array $row): array

Calcula, sem persistir, os valores para atualizar o registro. Retorna um array:

[
  'attempts'    => int,    // nova contagem de tentativas
  'nextTry'     => string, // data/hora ISO da próxima tentativa
]

update(mixed $row, string $updateMethod = 'update'): int|array

Versão flexível para aplicar a atualização imediatamente:

  • Se $row for um objeto com o método definido em $updateMethod, atribui as colunas e chama $row->{$updateMethod}(), retornando as linhas afetadas.
  • Caso contrário, devolve um array com os campos e valores a serem usados em um UPDATE manual via Dibi ou outro ORM.

统计信息

  • 总下载量: 616
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 0
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2020-12-17

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固