fix cleanQuery

This commit is contained in:
2025-04-13 11:09:42 +08:00
parent 36de254ced
commit 28c2f0bd4f
2 changed files with 37 additions and 7 deletions

View File

@@ -2,10 +2,11 @@ package model
import (
"context"
"fmt"
"strings"
"time"
"tyc-server/common/globalkey"
"github.com/Masterminds/squirrel"
"github.com/zeromicro/go-zero/core/stores/cache"
"github.com/zeromicro/go-zero/core/stores/sqlx"
)
@@ -17,7 +18,7 @@ type (
// and implement the added methods in customQueryModel.
QueryModel interface {
queryModel
DeleteBefore(ctx context.Context, before time.Time) (int64, error)
DeleteBefore(ctx context.Context, before time.Time, conditions ...squirrel.SelectBuilder) (int64, error)
}
customQueryModel struct {
@@ -31,13 +32,39 @@ func NewQueryModel(conn sqlx.SqlConn, c cache.CacheConf) QueryModel {
defaultQueryModel: newQueryModel(conn, c),
}
}
func (m *customQueryModel) DeleteBefore(ctx context.Context, before time.Time) (int64, error) {
func (m *customQueryModel) DeleteBefore(ctx context.Context, before time.Time, conditions ...squirrel.SelectBuilder) (int64, error) {
var affected int64 = 0
// 使用事务处理批量删除
err := m.defaultQueryModel.Trans(ctx, func(ctx context.Context, session sqlx.Session) error {
query := fmt.Sprintf("DELETE FROM %s WHERE create_time < ? AND del_state = ?", m.defaultQueryModel.table)
result, err := session.ExecCtx(ctx, query, before.Format("2006-01-02 15:04:05"), globalkey.DelStateNo)
// 创建基本的删除条件
deleteBuilder := squirrel.Delete(m.defaultQueryModel.table).
Where("create_time < ?", before.Format("2006-01-02 15:04:05")).
Where("del_state = ?", globalkey.DelStateNo)
// 如果提供了额外的查询条件,合并到删除条件中
if len(conditions) > 0 {
// 获取Where条件
whereSQL, whereArgs, err := conditions[0].Where("1=0").ToSql()
if err != nil {
return err
}
// 解析出where子句去掉"SELECT * FROM xxx WHERE"部分
whereParts := whereSQL[strings.LastIndex(whereSQL, "WHERE")+6:]
if len(whereParts) > 0 && len(whereArgs) > 0 {
deleteBuilder = deleteBuilder.Where(whereParts, whereArgs...)
}
}
// 生成SQL
query, args, err := deleteBuilder.ToSql()
if err != nil {
return err
}
result, err := session.ExecCtx(ctx, query, args...)
if err != nil {
return err
}