Files
zt-closet-manage-backend/internal/mysqldao/order.go
T
2026-09-11 01:47:20 +08:00

83 lines
2.2 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package mysqldao
import (
"context"
"git.lzcwy.cn/zhengchiliu/zt-closet-manage-backend/global"
"git.lzcwy.cn/zhengchiliu/zt-closet-manage-backend/internal/mysqlmodel"
"gorm.io/gorm"
)
// OrderDao 订单数据访问
type OrderDao struct {
db *gorm.DB
}
// NewOrderDao 创建订单 DAO
func NewOrderDao() *OrderDao {
return &OrderDao{db: global.MysqlEngine}
}
// OrderListParams 订单分页列表筛选参数。
type OrderListParams struct {
OrderNo string // 订单号(精确)
UserID int64 // 用户 ID,0 表示全部
Status int8 // 订单状态,0 表示全部
Page int
Size int
}
// OrderList 分页查询订单
func (d *OrderDao) OrderList(ctx context.Context, p OrderListParams) ([]mysqlmodel.Order, int64, error) {
ctx, span := global.Tracer.Start(ctx, "mysqldao.OrderList")
defer span.End()
var list []mysqlmodel.Order
var total int64
q := d.db.WithContext(ctx).Model(&mysqlmodel.Order{})
if p.OrderNo != "" {
q = q.Where("order_no = ?", p.OrderNo)
}
if p.UserID != 0 {
q = q.Where("user_id = ?", p.UserID)
}
if p.Status != 0 {
q = q.Where("order_status = ?", p.Status)
}
if err := q.Count(&total).Error; err != nil {
span.RecordError(err)
return nil, 0, err
}
if err := q.Offset((p.Page - 1) * p.Size).Limit(p.Size).Order("id DESC").Find(&list).Error; err != nil {
span.RecordError(err)
return nil, 0, err
}
return list, total, nil
}
// OrderGetByOrderNo 按订单号查询订单
func (d *OrderDao) OrderGetByOrderNo(ctx context.Context, orderNo string) (*mysqlmodel.Order, error) {
ctx, span := global.Tracer.Start(ctx, "mysqldao.OrderGetByOrderNo")
defer span.End()
var order mysqlmodel.Order
if err := d.db.WithContext(ctx).Where("order_no = ?", orderNo).First(&order).Error; err != nil {
span.RecordError(err)
return nil, err
}
return &order, nil
}
// OrderGetByID 按主键 ID 查询订单
func (d *OrderDao) OrderGetByID(ctx context.Context, id int64) (*mysqlmodel.Order, error) {
ctx, span := global.Tracer.Start(ctx, "mysqldao.OrderGetByID")
defer span.End()
var order mysqlmodel.Order
if err := d.db.WithContext(ctx).First(&order, id).Error; err != nil {
span.RecordError(err)
return nil, err
}
return &order, nil
}