From 785e7b9bee19c4aab6cb3ac8245cee7ad3b90cd6 Mon Sep 17 00:00:00 2001 From: GoEdgeLab Date: Tue, 16 Mar 2021 18:08:33 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BE=9B=E6=A3=80=E7=B4=A2ACME?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/db/models/acme/acme_task_dao.go | 54 ++++++++++++++++++++-- internal/rpc/services/service_acme_task.go | 4 +- 2 files changed, 51 insertions(+), 7 deletions(-) diff --git a/internal/db/models/acme/acme_task_dao.go b/internal/db/models/acme/acme_task_dao.go index b447bbed..233c3a40 100644 --- a/internal/db/models/acme/acme_task_dao.go +++ b/internal/db/models/acme/acme_task_dao.go @@ -15,6 +15,7 @@ import ( "github.com/iwind/TeaGo/dbs" "github.com/iwind/TeaGo/logs" "github.com/iwind/TeaGo/types" + "time" ) const ( @@ -99,15 +100,58 @@ func (this *ACMETaskDAO) DisableAllTasksWithCertId(tx *dbs.Tx, certId int64) err } // 计算所有任务数量 -func (this *ACMETaskDAO) CountAllEnabledACMETasks(tx *dbs.Tx, adminId int64, userId int64) (int64, error) { - return dbutils.NewQuery(tx, this, adminId, userId). - State(ACMETaskStateEnabled). +func (this *ACMETaskDAO) CountAllEnabledACMETasks(tx *dbs.Tx, adminId int64, userId int64, isAvailable bool, isExpired bool, expiringDays int64, keyword string) (int64, error) { + query := dbutils.NewQuery(tx, this, adminId, userId) + if isAvailable || isExpired || expiringDays > 0 { + query.Gt("certId", 0) + + if isAvailable { + query.Where("certId IN (SELECT id FROM " + models.SharedSSLCertDAO.Table + " WHERE timeBeginAt<=UNIX_TIMESTAMP() AND timeEndAt>=UNIX_TIMESTAMP())") + } + if isExpired { + query.Where("certId IN (SELECT id FROM " + models.SharedSSLCertDAO.Table + " WHERE timeEndAt 0 { + query.Where("certId IN (SELECT id FROM "+models.SharedSSLCertDAO.Table+" WHERE timeEndAt>UNIX_TIMESTAMP() AND timeEndAt<:expiredAt)"). + Param("expiredAt", time.Now().Unix()+expiringDays*86400) + } + } + + if len(keyword) > 0 { + query.Where("(domains LIKE :keyword)"). + Param("keyword", "%"+keyword+"%") + } + if len(keyword) > 0 { + query.Where("domains LIKE :keyword"). + Param("keyword", "%"+keyword+"%") + } + + return query.State(ACMETaskStateEnabled). Count() } // 列出单页任务 -func (this *ACMETaskDAO) ListEnabledACMETasks(tx *dbs.Tx, adminId int64, userId int64, offset int64, size int64) (result []*ACMETask, err error) { - _, err = dbutils.NewQuery(tx, this, adminId, userId). +func (this *ACMETaskDAO) ListEnabledACMETasks(tx *dbs.Tx, adminId int64, userId int64, isAvailable bool, isExpired bool, expiringDays int64, keyword string, offset int64, size int64) (result []*ACMETask, err error) { + query := dbutils.NewQuery(tx, this, adminId, userId) + if isAvailable || isExpired || expiringDays > 0 { + query.Gt("certId", 0) + + if isAvailable { + query.Where("certId IN (SELECT id FROM " + models.SharedSSLCertDAO.Table + " WHERE timeBeginAt<=UNIX_TIMESTAMP() AND timeEndAt>=UNIX_TIMESTAMP())") + } + if isExpired { + query.Where("certId IN (SELECT id FROM " + models.SharedSSLCertDAO.Table + " WHERE timeEndAt 0 { + query.Where("certId IN (SELECT id FROM "+models.SharedSSLCertDAO.Table+" WHERE timeEndAt>UNIX_TIMESTAMP() AND timeEndAt<:expiredAt)"). + Param("expiredAt", time.Now().Unix()+expiringDays*86400) + } + } + if len(keyword) > 0 { + query.Where("(domains LIKE :keyword)"). + Param("keyword", "%"+keyword+"%") + } + _, err = query. State(ACMETaskStateEnabled). DescPk(). Offset(offset). diff --git a/internal/rpc/services/service_acme_task.go b/internal/rpc/services/service_acme_task.go index fafee49e..5ce987b9 100644 --- a/internal/rpc/services/service_acme_task.go +++ b/internal/rpc/services/service_acme_task.go @@ -60,7 +60,7 @@ func (this *ACMETaskService) CountAllEnabledACMETasks(ctx context.Context, req * tx := this.NullTx() - count, err := acmemodels.SharedACMETaskDAO.CountAllEnabledACMETasks(tx, req.AdminId, req.UserId) + count, err := acmemodels.SharedACMETaskDAO.CountAllEnabledACMETasks(tx, req.AdminId, req.UserId, req.IsAvailable, req.IsExpired, int64(req.ExpiringDays), req.Keyword) if err != nil { return nil, err } @@ -76,7 +76,7 @@ func (this *ACMETaskService) ListEnabledACMETasks(ctx context.Context, req *pb.L tx := this.NullTx() - tasks, err := acmemodels.SharedACMETaskDAO.ListEnabledACMETasks(tx, req.AdminId, req.UserId, req.Offset, req.Size) + tasks, err := acmemodels.SharedACMETaskDAO.ListEnabledACMETasks(tx, req.AdminId, req.UserId, req.IsAvailable, req.IsExpired, int64(req.ExpiringDays), req.Keyword, req.Offset, req.Size) if err != nil { return nil, err }