fix cleanQuery
This commit is contained in:
parent
36de254ced
commit
28c2f0bd4f
@ -28,8 +28,11 @@ func (l *CleanQueryDataHandler) ProcessTask(ctx context.Context, t *asynq.Task)
|
|||||||
// 计算3天前的时间
|
// 计算3天前的时间
|
||||||
threeDaysAgo := time.Now().AddDate(0, 0, -3)
|
threeDaysAgo := time.Now().AddDate(0, 0, -3)
|
||||||
|
|
||||||
// 调用QueryModel删除3天前的数据
|
// 创建查询条件,排除product_id为4的记录
|
||||||
result, err := l.svcCtx.QueryModel.DeleteBefore(ctx, threeDaysAgo)
|
conditions := l.svcCtx.QueryModel.SelectBuilder().Where("product_id != ?", 4)
|
||||||
|
|
||||||
|
// 调用QueryModel删除3天前的数据,排除product_id为4的记录
|
||||||
|
result, err := l.svcCtx.QueryModel.DeleteBefore(ctx, threeDaysAgo, conditions)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logx.Errorf("%s - 清理查询数据失败: %v", time.Now().Format("2006-01-02 15:04:05"), err)
|
logx.Errorf("%s - 清理查询数据失败: %v", time.Now().Format("2006-01-02 15:04:05"), err)
|
||||||
return err
|
return err
|
||||||
|
@ -2,10 +2,11 @@ package model
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
"tyc-server/common/globalkey"
|
"tyc-server/common/globalkey"
|
||||||
|
|
||||||
|
"github.com/Masterminds/squirrel"
|
||||||
"github.com/zeromicro/go-zero/core/stores/cache"
|
"github.com/zeromicro/go-zero/core/stores/cache"
|
||||||
"github.com/zeromicro/go-zero/core/stores/sqlx"
|
"github.com/zeromicro/go-zero/core/stores/sqlx"
|
||||||
)
|
)
|
||||||
@ -17,7 +18,7 @@ type (
|
|||||||
// and implement the added methods in customQueryModel.
|
// and implement the added methods in customQueryModel.
|
||||||
QueryModel interface {
|
QueryModel interface {
|
||||||
queryModel
|
queryModel
|
||||||
DeleteBefore(ctx context.Context, before time.Time) (int64, error)
|
DeleteBefore(ctx context.Context, before time.Time, conditions ...squirrel.SelectBuilder) (int64, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
customQueryModel struct {
|
customQueryModel struct {
|
||||||
@ -31,13 +32,39 @@ func NewQueryModel(conn sqlx.SqlConn, c cache.CacheConf) QueryModel {
|
|||||||
defaultQueryModel: newQueryModel(conn, c),
|
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
|
var affected int64 = 0
|
||||||
|
|
||||||
// 使用事务处理批量删除
|
// 使用事务处理批量删除
|
||||||
err := m.defaultQueryModel.Trans(ctx, func(ctx context.Context, session sqlx.Session) error {
|
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 {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user