编辑
2024-04-27
还没写好
00
请注意,本文编写于 549 天前,最后修改于 549 天前,其中某些信息可能已经过时。

目录

build sql函数内的修改
票据订单接口

首先复制前面的build sql。因为不同的数据库可能字段不一样,而我们需要筛选的是当前数据库当前条件下的金额汇总就行了。

其次再最外层加上调用这个方法获得sql的方法,还得修改结构体以便于接收参数。

build sql函数内的修改

先修改头sql添加头sql方法

go
go
var sumAmountList []wamapping.CurrencySum sumAmountSQL, sumAmountValues,err := r.BuildSumAmountSQLWithValues(ctx.Context()) if err != nil { return errors.WithMessage(err, "Failed to build SQL for querying the total order amount by currency in the collection") } if err = s.DB.Raw(sumAmountSQL, sumAmountValues...).Scan(&sumAmountList).Error; err != nil { return errors.WithMessage(err, "search wealth order list failed") } err = copier.CopyWithOption(&resp.CurrencySumList, sumAmountList, copier.Option{Converters: []copier.TypeConverter{TimerPoint2StringConverter, String2IntConverter}}) if err != nil { l.Info("copy database model to resp model failed", zap.String("error", err.Error())) return code.Response(ctx, code.NewDefaultError(code.ErrBuildResp), nil) }

票据订单接口

go
func (w WealthOrderDao) SearchAll(ctx context.Context, tx *gorm.DB, sWrapper *dao.OrderSearchWrapper) (tradedb.TWealthOrders, error) { if tx == nil { tx = w.DBCtx(ctx) } ret := make(tradedb.TWealthOrders, 0, 0) // 应用 `sWrapper.GormSearch()` 方法提供的 GORM 搜索范围(scopes) g := tx.WithContext(ctx).Table(tradedb.TWealthOrderTableName).Scopes(sWrapper.GormSearch()) if sWrapper.Sort.Valid { g = g.Order(sWrapper.Sort.ValueOrZero()) } return ret, g.Find(&ret).Error }

这段 Go 代码定义了一个名为 SearchList 的方法,该方法是 WealthOrderDao 接口的一个实现,主要用于从数据库中搜索并获取财富订单列表。下面逐行解释代码含义:

  1. 定义了一个函数,其接收者 w 是实现了 WealthOrderDao 接口的对象,参数包括:

    • ctx: 上下文对象,通常携带请求相关的元数据及取消信号。
    • tx: 可选的数据库事务对象,默认为 nil。若传入则使用传入的事务进行数据库操作,否则使用 w.DBCtx(ctx) 创建或获取数据库连接。
  2. 判断是否提供了数据库事务 tx,如果没有提供,则基于 ctx 上下文获取数据库连接。

  3. 初始化一个空的 tradedb.TWealthOrders 类型切片,它应该是预定义的一种用于存储财富订单数据的结构体切片。

  4. 使用 WithContext 方法将 ctx 上下文传递给数据库连接,接着设置查询表名为 tradedb.TWealthOrderTableName 并应用 sWrapper.GormSearch() 方法提供的 GORM 搜索范围(scopes)。

  5. 根据 sWrapper.Start 设置查询的偏移量(offset),用于分页查询时跳过前几条记录。

  6. 根据 sWrapper.Count 设置查询的数量限制(limit),用于控制单次查询返回的记录数量。

  7. 检查排序字段 sWrapper.Sort 是否有效,如果有效,则按照其值(sWrapper.Sort.ValueOrZero())对查询结果进行排序。

  8. 最后,执行数据库查询操作,将查询结果填充到之前初始化的空切片 ret 中,并返回填充后的切片以及查询过程中的任何错误。

综上所述,这段代码实现了一个利用 GORM 库针对财富订单表进行条件筛选、排序和分页查询的方法,并返回符合查询条件的财富订单列表及可能发生的错误。

本文作者:JIeJaitt

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!